在这里先说点小知识,main()方法在一个类中(本例是在Z类中),但不代表main()方法就是属于这个类。(楼主可以把main()函数很果断的剪切到同一个包下的X或Y中试下)
看重点:
class X { //main中z对父类x的构造方法调用,运行的是 Y b = new y();还是X()??
Y b = new Y(); //2. 这里是重点,应该听说过这样一句话,先静态后动态,先成员后构造,所以这里,先是 Y b = new Y(),再是X()构造函数
X() { //4. 然后这才是第2步中X()构造函数。所以输出----------------------------------->X
System.out.print("X");
}
}
class Y {
Y() {//3.由于第2步的原因,所以这里第3步输出------------------------------------->Y
//6.由于第5步Y b = new Y()的原因,所以这里输出-------------------------------->Y
System.out.print("Y");
}
}
public class Z extends X {
Y y = new Y(); //5. 第4步完了之后,就到Z类中了,这里还是先成员后构造,所以先是Y b = new Y(),再是Z();
Z() { //7. 最后一步是new Z(),所以最后输出------------------------------>Z
System.out.print("Z");
}
public static void main(String[] args) { //main函数是入口不用说的
new Z(); //1. 调用Z类在构造函数,但是Z是继承X的,所以先到X类中
}
}