刚看到的一道面试题
public class Constructs { public static void main(String[] args) { new Z(); } } class X{ Y b = new Y(); X(){ System.out.println("X"); } } class Y{ Y(){ System.out.println("Y"); } } class Z extends X{ Y y = new Y(); Z(){ System.out.println("Z"); } }
输出结果是
Y
X
Y
Z
解析:
当new Z();的时候,因为Z继承自X,所以会先构造X,进入X类先初始化全局变量,所以运行Y b = new Y();,调用Y的构造函数输出“Y”,
然后执行X的构造函数,输出“X”,构造完X后,会构造Y,先初始化Z的全局变量,执行Y y = new Y();,调用Y的构造函数输出“Y”,最后调用Z的构造函数输出“Z”