/**
*打印结果为: Sub0 Sub30 40
*初始化顺序没错,只是父类在初始化时调用的是子类中复写的print方法,此时i值为默认初始化的0,
*父类构造方法完毕后回到子类构造方法,对i进行显示初始化30,然后执行方法体调用print方法,为30,
*继续执行赋值40,回到主函数执行打印40,所以最后顺序03040是这么得来的。
*/
public class test {
public static void main(String[] args){
System.out.println(new Sub().i);
}
}
class Super{
int i = 10;
String str = "hell";
Super(){
print();
i = 20;
}
void print(){
System.out.println("super"+i+str+"yes");
}
}
class Sub extends Super{
int i = 30;
String str = "hell";
Sub(){
print();
i = 40;
}
void print(){
System.out.println("Sub"+i);
}
} |