for (f.show('A'); f.show('B')&&(i<2); f.show('C'))
{
i++;
d.show('D');
}
}
}
复制代码
打印结果: A B 。
f.show('B')&&(i<2); 为真时 为何没有执行循环体? 作者: 杨剑 时间: 2013-3-15 23:17
因为子类复写了父类的show方法,所以多态f变量,或者是d变量,调用show方法时都执行的是子类的show方法,执行循环体的时候for (f.show('A'); f.show('B')&&(i<2); f.show('C'))时,f.show('A')打印A字符,f.show('B')打印B字符,并返回false,由于&&是短路运算符,如果前面为false,后面就不在执行,循环体结束,所以只打印AB。作者: 孙宁 时间: 2013-3-15 23:19
f.show('B')&&(i<2)是假吧?Fu f = new Demo()是多态,f.show('B')执行的结果是输出'B',返回false,判断条件也就为假了作者: 黑马-郑玉元 时间: 2013-3-15 23:20
你这f.show('B')得到的结果就是false。执行的过程是这样的:
Fu f = new Demo();父类的引用指向子类的对象,因为子类重写了父类的方法,所以f.show('A')执行的是子类的show方法,打印结果是A;
再接着f.show('B')也是执行子类的show方法,返回的值是false,因为是短路与,后面的i<2不会被执行,整个循环也结束,代码运行结束。作者: 黑马李超 时间: 2013-3-15 23:21
Fu f = new Demo();这个是多态的使用
f.show('B')就相当于new Demo().show('B');所以返回false。循环条件不符合,循环结束。作者: 黑马17期-闫东东 时间: 2013-3-15 23:27
for (f.show('A'); f.show('B')&&(i<2); f.show('C'))
1,执行f.show('A'); 因为Fu f = new Demo(); 父类引用指向子类对象,子类重写show()方法,执行子类Demo的show()方法,返回false 打印 A
2,执行f.show('B'); 同理 返回false,打印 B && 短路,&&)&&(i<2); f.show('C'不执行,循环条件不满足,不执行。
所以最后打印:
A
B
主要是Fu f = new Demo();执行的是子类重写的方法。