大家帮忙看一下运行结果
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()
{
System.out.print( "Z ");
}
public static void main(String[] args)
{
new Z();
}
}
这段代码我认为是YYXZ,但是我编译 运行了一下结果是YXYZ请问为什么?
我错在哪 了?
X的构造函数在被调用的时候应给首先调用Y b = new Y();这句啊?
请赐教
------解决方案--------------------这是涉及到初始化顺序的问题
他们的初始化顺序是这样的:
首先,Z是继承于X的,所以在初始化Z的构造器之前先要初始化X的构造器的!而成员变量应该先于构造器而被初始化(有static时另当别论),所以Y会先被执行.
接着,执行X的构造器,X被打印出来.
继续,到达类Z中,同理,先初始化成员y,所以又打印出一个Y.
最后,调用Z的构造器打印出Z!
Y在这些类的关系上是没有继承关系的,它只不过是被X和Z来用了一下而已,我想你是错在这里吧.
------解决方案--------------------同上!
------解决方案--------------------只要去实例化一个类时,才去调用构造函数。
加载类时,是按顺序的