黑马程序员技术交流社区
标题:
求大神解答!这些程序之间到底什么关系
[打印本页]
作者:
大大老伴要跪IT
时间:
2014-1-13 21:22
标题:
求大神解答!这些程序之间到底什么关系
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();
}
}
复制代码
输出结果是什么?求详细的解答过程。
作者:
淡夜清风
时间:
2014-1-13 21:45
输出结果:YXYZ
new Z();先找到Z的构造函数,又看Z继承自X,所以在初始化X之前应该先调用X默认构造函数。
而又发现X类中有一个内嵌对象y。所以又先要初始化内嵌对象y,调用Y类的构造函数。先输出
Y
。然后再回到X的构造函数输出
X
。X类的构造函数执行完后,再回到Z的构造函数。而又发现Z类中又有一个内嵌对象y。所以还要先初始化内嵌对象y,调用Y类的构造函数。再次输出
Y
。然后再返回执行Z的构造函数最后输出
Z
。
(注意一点:如果一个类中有内嵌对象的初始化,要先对内嵌对象的初始化,再对本类的对象初始化)
作者:
孤独的天奇
时间:
2014-1-13 23:04
输出结果是:YXYZ,子类的构造函数第一句都有有一句隐式的super()。剩下的就好理解了
作者:
↑↓ME→←
时间:
2014-1-13 23:28
这个可以使用eclipse在main主程序内设置一个断电,查看一下程序流程!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2