A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 汗血黑马 中级黑马   /  2014-3-20 16:16  /  968 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 汗血黑马 于 2014-3-20 16:45 编辑

class Fu//定义一个父类
{
        boolean show(char a)//定义一个方法,接收字符串
        {
                System.out.println(a);//打印字符串
                return true;//返回值 true.
        }
}
class Demo extends Fu//定义Demo类继承父类
{
        public static void main(String[] args)//程序主函数。
        {
                int i =0;//定义一个变量i。
                Fu f = new Demo();//创建一个fu类的子类对象Demo.
                Demo d = new Demo();//创建对象Demo的实例化对象。
                for(f.show('o'); f.show('p')&&(i<2); f.show('C'))//遍历数组
                {
                        i++;
                        d.show('D');
                }
        }
        boolean show(char a)
        {
                System.out.print(a);
                return false;
        }
}//为什么打印的结果是op呢?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

2 个回复

倒序浏览
这个涉及到多态了,Fu类中有boolean show(char c)方法,子类Demo中继承了Fu类,并复写了这个show方法。
Fu f = new Demo();将子类对象赋给Fu类引用变量,但实际运行时,f.show('p')调用的是Demo这个子类对象的方法体,所以f.show('p')返回false.
for(f.show('o'); f.show('p')&&(i<2); f.show('C'))循环里, f.show('o')执行了一次,但第一次判断终止条件时就是false,循环一次都没执行,打印结果就是op.

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
父类引用指向子类对象,子类重写了父类的show方法, for(f.show('o'); f.show('p')&&(i<2); f.show('C')); for循环开始f.show('o'); 打印o。f.show('p')&&(i<2); 打印 p ,因为f.show('p')返回值是false,所以不会进入循序,程序结束。值打印了 o和p

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马