Java【基础学习】 之调用构造方法顺序【坑】
解释:这里的super()仅仅是用来占位的,实际上,必须是严格按照分层初始化的过程:
1.先初始化父类X的成员变量,即初始化成员变量Y,打印出:Y
2.初始化父类X的构造方法,打印出:X
3.父类初始化完成之后,初始化子类Z,先初始化子类的成员变量y,打印出:Y
4.接着初始化子类Z的构造方法,打印出:Z
可以看出,super()在这里不影响初始化的顺序
1 class X { 2 Y b = new Y(); 3 X() { 4 System.out.print("X"); 5 } 6 } 7 8 class Y { 9 10 Y() { 11 System.out.print("Y"); 12 } 13 } 14 15 public class Z extends X { 16 17 Y y = new Y(); 18 19 Z() { 20 //super(); 21 System.out.print("Z"); 22 } 23 24 public static void main(String[] args) { 25 new Z(); 26 } 27 }
结果:YXYZ