黑马程序员技术交流社区
标题: 有点难度的题 大家看看 [打印本页]
作者: 屠赞华 时间: 2015-4-3 21:31
标题: 有点难度的题 大家看看
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();
}
}
//答案是YXYZ
作者: liyanghml 时间: 2015-4-4 01:52
创建Z对象,Z继承X,X中又有Y对象:所以先输出父类:YX,
之后Z类中创建Y对象,再之后加构造函数:输出YZ
最终结果:YXYZ
作者: TanQiao 时间: 2015-4-4 10:16
先初始化父类
作者: 杨大萌 时间: 2015-4-4 10:53
首先,读到new z();记载z及其父类x进内存,访问隐式语句super();访问父类的初始化情况,初始化变量Y,打印y,初始化构造函数x(),打印x。然后要创建z对象,就先要初始化z的成员变量y,打印y,接着在构造函数内打印z
这就是new语句在内存中的操作流程。
作者: hello_csu 时间: 2015-4-4 11:25
通过看运行指令:创建Z先执行了Y y = new Y(); 此时就创建Y对象,该对象因为也有子类,其会先创建X,打印:
YX,而后在调用Y的构造函数,打印Y,而后调用Z的,所以就是YXYZ
作者: Lois 时间: 2015-4-4 19:35
顶一个
作者: 天空的彩虹 时间: 2015-4-4 19:41
最终结果:YXYZ
作者: 屠赞华 时间: 2015-4-4 19:50
太对了 老师就是这么讲的
作者: daveyang 时间: 2015-4-4 20:10
这个题很好,帮助理解Java的运行机制
作者: 杨大萌 时间: 2015-4-4 20:39
被采纳,有技术分没?
作者: long_yihuan 时间: 2015-4-5 13:33
调用子类的构造器之前先调用的是父类的构造器
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |