输出结果:YXYZ
new Z();先找到Z的构造函数,又看Z继承自X,所以在初始化X之前应该先调用X默认构造函数。
而又发现X类中有一个内嵌对象y。所以又先要初始化内嵌对象y,调用Y类的构造函数。先输出Y。然后再回到X的构造函数输出X。X类的构造函数执行完后,再回到Z的构造函数。而又发现Z类中又有一个内嵌对象y。所以还要先初始化内嵌对象y,调用Y类的构造函数。再次输出Y。然后再返回执行Z的构造函数最后输出Z。
(注意一点:如果一个类中有内嵌对象的初始化,要先对内嵌对象的初始化,再对本类的对象初始化)