你这f.show('B')得到的结果就是false。执行的过程是这样的:
Fu f = new Demo();父类的引用指向子类的对象,因为子类重写了父类的方法,所以f.show('A')执行的是子类的show方法,打印结果是A;
再接着f.show('B')也是执行子类的show方法,返回的值是false,因为是短路与,后面的i<2不会被执行,整个循环也结束,代码运行结束。
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();执行的是子类重写的方法。