这个面试题有点难度,有一些饶。不明白可以在下面讨论。还是值得搞懂的。 / * 看程序写结果: A:成员变量的问题 int x = 10; //成员变量x是基本类型 Student s = new Student(); //成员变量s是引用类型 B:一个类的初始化过程 成员变量的初始化 默认初始化。 显示初始化。 构造方法初始化 C:子父类的初始化(分层初始化) 先进行父类初始化,然后进行子类初始化。 结果: YXYZ 问题: 虽然子类中构造方法默认有一个super() (初始化)的时候,(不是)按照那个顺序进行的。 (而是)按照(分层)初始化进行的。 (它仅仅表示)要先初始化父类数据,再初始化子类数据。 */ class X { Y b = new Y();//这是成员变量初始化 X() { System.out.print("X"); } } class Y { Y() { System.out.print("Y"); } } public class Z extends X { Y y = new Y();//Y Z() { //super()隐含一个super(),不代表执行,仅仅表示要(先初始化)父类数据,隐含调用了父类中的无参构造方法,最后再初始化子类数据 System.out.print("Z");//Z } public static void main(String[] args) { new Z(); //先去初始化父类x,再去访问子类z } }易错答案:YYXZ.因为没考虑到super其实仅仅时代表了初始化父类数据