关于JAVA父类和子类之间构造函数的问题

public class Z extends X{
Y y=new Y();
Z(){
System.out.println("z");
}
public static void main(String[] arg){
new Z();
}
}
class X{
Y b=new Y();
X(){
System.out.print("x");
}
}
class Y{
Y(){
System.out.print("y");
}
}

执行 new Z()这句的时候 应该是先调用Z的父类X的构造函数是然后在调用子类的构造函数是的吧 但是为什么会执行 Y y=new Y()这句呢? 明明Y y=new Y()这句话不再X的构造函数内的吧 难道是我理解错误了。希望那位朋友能够帮帮忙解释一下 不甚感激。

类实例化的过程:
1构造父类的成员变量和类变量
2调用父类构造函数
3构造本类的成员变量和类变量
4调用本类构造函数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-19
Z继承自X 于是继承了X中的成员变量b 而b是Y的实例变量 所以在构造Z的实例的时候必须要构造该对象的成员变量b 也就是Y的对象 于是就要调用Y的构造方法 所以就打印出了“Y”
第2个回答  2008-12-19
“执行 new Z()这句的时候 应该是先调用Z的父类X”这句说的没错,但不是先执行X的构造方法,在加载构造方法前,要先加载类中实例化部分,所以就先执行了类X中的“Y b=new Y()” ;同理类Z中也是先执行“Y y=new Y();”。输出结果应该是yxyz
第3个回答  2008-12-19
xuexi
相似回答