黑马程序员技术交流社区

标题: 这个属于什么类型的问题? [打印本页]

作者: 汗血黑马    时间: 2014-3-20 16:16
标题: 这个属于什么类型的问题?
本帖最后由 汗血黑马 于 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呢?
作者: chen_x    时间: 2014-3-20 16:32
这个涉及到多态了,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.
作者: 一年_Hei    时间: 2014-3-20 16:34
父类引用指向子类对象,子类重写了父类的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




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2