悬赏3个C金币请教一个选择题

下面是一个选择题
下列程序的运行结果是()
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[] agrs){new Z()}
}

A Z B YZ C XYZ DYXYZ
希望能给出详细的答案分析,拜托了!!

java 对象的实例化顺序若有继承关系,先实例化父类,先在内存中调用父类的静态方法,静态块,子类中的静态方法,静态块,然后是父类中的构造方法,

子类中的构造方法。

答案是选D,求解释!

D,Z继承自Z,new Z()时,先进行X的初始化,X中要先进行Y的初始化,然后到X的构造

你想肯定选B,是因为忽略继承情况

new Z() 就是对Z初始化。由于Z继承了X,所以要先初始化X。初始化X时,按照 静态变量>静态方法>全局变量>构造函数的顺序,所以先输出Y,再输出X。X初始化完成后,再初始化Z,跟X的顺序一样,输出YZ。总共就是YXYZ,选D

看了半天才搞明白为啥选D,

Z继承了X,先实现父类里面的,就是实现X里面,所以是YX,再实现Z里面的,所以YZ,所以答案选D YXYZ