java为什么会是这样的输出结果

classX{Yb=newY();X(){System.out.print("X");}}classY{Y(){System.out.print("Y");}}publi... class X {
Y b = new Y();
X() {
System.out.print("X");
}
}

class Y {
Y() {
System.out.print("Y");
}
}

public class Z extendsX {
Y y = new Y();
Z() {
System.out.print("Z");
}

public static void main(String[] args) {
new Z();
}
}
为什么输出是yxyz?
展开
 我来答
坑507
推荐于2016-06-04 · 超过10用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:14.4万
展开全部
因为Z继承了X,所以new一个Z的时候先执行X的构造函数。转到X类中,先new一个Y,再输出X。在类Y中,输出Y。所以先输出Y,再输出X,再回到Z中,new一个Y,输出Y,最后执行Z的构造函数输出Z。所以顺序是YXYZ
追问
new关键字的执行顺序是什么?不是只执行构造方法吗?为什么还会执行这个Y y = new Y();
追答
先执行父类的构造函数,因为Z类中有声明变量y,所以先为变量开辟空间,再执行构造函数。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式