java-se - Java初学-继承:(如图)程序这样执行的顺序为什么是错误的
本文介绍了java-se - Java初学-继承:(如图)程序这样执行的顺序为什么是错误的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
解决方案
首先,你的代码和下面代码是等价的:
class X {
Y b;
public X() {
b = new Y();
System.out.println("X");
}
}
class Y {
public Y() {
System.out.println("Y");
}
}
public class Z extends X {
Y y;
public Z() {
y = new Y();
System.out.println("Z");
}
public static void main(String[] args) throws Exception {
new Z();
}
}
new Z()
之后,调用Z
的无参构造函数;因为
Z
继承了X
,所以去调用X
的无参构造函数(执行super()
);X
的无参构造函数第一行代码为Y b = new Y()
,所以去调用Y
的无参构造函数,此时输出 Y;Y b = new Y()
执行完毕之后,回到X
的无参构造函数,输出 X;然后回到
Z
的无参构造函数,执行Y y = new Y()
输出 Y,最后输出 Z。
所以图中提到的 先执行 X 的构造函数 的说法是错误的,应该最先执行的是 Y 的构造函数。
这篇关于java-se - Java初学-继承:(如图)程序这样执行的顺序为什么是错误的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文