2 yabin1016 yabin1016 于 2016.02.19 11:21 提问

悬赏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
希望能给出详细的答案分析,拜托了!!

7个回答

qq_24559477
qq_24559477   2016.02.19 11:59
已采纳

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

子类中的构造方法。

bdmh
bdmh   Ds   Rxr 2016.02.19 11:36

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

qq_27350929
qq_27350929   2016.02.19 13:00

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

yabin1016
yabin1016   2016.02.19 11:26

答案是选D,求解释!

qian_xiao_lj
qian_xiao_lj   2016.02.19 16:38

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

enpterexpress
enpterexpress   2016.02.19 12:07

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

u011433711
u011433711   2016.02.19 16:27

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!