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

你可能感兴趣的:(Java【基础学习】 之调用构造方法顺序【坑】)