public class SuperA {
public SuperA(){
printX();
}
public void printX(){
System.out.println("hello superA!");
}
}
public class SuperB extends SuperA {
public SuperB(){
printX();
}
public void printY(){
System.out.println("hello superB!");
}
@Override
public void printX(){
System.out.println("hello override BB!");
}
}
public class SuperTest {
public static void main(String[] args) {
SuperB b = new SuperB();
}
}
输出:为
hello override BB!
hello override BB!
原因是
new SuperB()
时,根据虚拟机的加载机制,会优先初始化其父类superA,执行superA的构造方法,但是,superB类中将pintfX方法重写,所以在superA中执行printX方法时,其方法已经被superB覆盖,所以输出hello override BB!
new superA()时,会输出hello superA! 与superB 没有关系。