A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 渴望学习 中级黑马   /  2014-7-20 22:12  /  1882 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

20.运行以下代码片段,输出结果是?( )
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();
        }
}
A. Z
B. YZ
C. XYZ
D. YXYZ

9 个回复

倒序浏览
           D               
回复 使用道具 举报

嗯。 您是对的。!!!!
回复 使用道具 举报
不会,很诧异为什么是D,debug了下之后理解了
回复 使用道具 举报
我也认为是选d,
回复 使用道具 举报
先进入父类构造函数的吧
回复 使用道具 举报
DSY 中级黑马 2014-7-20 23:38:26
7#
楼主可以分享下原因吗           
回复 使用道具 举报
瞧瞧         
回复 使用道具 举报
DSY 发表于 2014-7-20 23:38
楼主可以分享下原因吗

不好意思,刚刚看到,现在说一下原因
当new z(); 的时候 首先要把 class z 加载进内存中,而class z 继承了 Class  x 所以在 加载 class z 之前要 先加载 class x  当加载class x的时候 就已将创建了 Y对象,并打印了 Y,(在创建对象之前 calss Y已经加载到内存中来了哦),在 创建子类对象的时候 默认先调用父类的构造函数,打印了X 然后再 加载 class Z 又打印一个  Y 然后再 打印 Z
回复 使用道具 举报
没看懂,证明我基础差得离谱
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马