Code:
class A{
A() {
test();
}
void test(){
System.out.println("from A");
}
}
class B extends A {
void test() {
System.out.println("from B");
}
}
class C {
public static void main(String args []){
A a = new B();
a.test();
}
}
Output:
from B
from B
为什么会这样打印?
This is 非常糟糕代码。发生的事情是这样的void test()
在子类中被覆盖B
.
new B();
创建类的实例B
。您引用的事实将其投射到A
与此无关。但即使子类尚未构建,Java运行时从父类的构造函数中调用该子类中的方法A
.
使用此(反)模式时要格外小心! (请注意,在 C++ 中,您会得到未定义的行为)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)