看程序,写结果,结果是?
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();
Z() {
//super();
System.out.print("Z");
}
public static void main(String[] args) {
new Z();
}
}
考察知识点(两个知识点的回顾+两个知识点的深入理解):
1.回顾的两个知识点:
(1.)当成员变量是引用类型的时候,例如类或数组(本题是类),
定义的格式是: 类名 对象名 = new 类名()
(2.)一个类数据初始化的顺序:
默认初始化(例如成员变量a是采用变量赋值的第一种形式时,即int a;并不赋值,那么系统默认它的 值是0),
显示初始化(本题中就是如此)
构造初始化
2.深入理解的两个知识点
(1.)分层初始化的彻底性:先进行父类的初始化,再进行子类的初始化,也就是说父类一直到构造初始化结束后再进行子类的初始化
(2.)super()位置带来的困惑:我们知道super关键字可以理解为父类的引用,子类每个构造方法执行前都得先访问父类的构造方法,所以z类的构造方法中默认存在super();这条语句(而且必须在构造体里的第一行!!)可是初始化顺序却不是按照父类的成员初始化--子类的成员初始化-父类的构造初始化-子类的构造初始化,super仅仅表示先要让父类初始化而已!!
|
|