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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小小瓶盖❤ 中级黑马   /  2014-1-16 17:44  /  1248 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

运行以下代码片段,输出结果是?( D )
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
谁能帮我分析一下吗?

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

2 个回复

倒序浏览
这题考的是创建对象时构造函数初始化的问题:
首先要明确下面一点:子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每个子类构造内的第一行都有默认的语句super();
好了,你先的找到主函数,因为只有一条线程,new Z(),Z会访问父类构造函数,但父类先   Y b = new Y();所以打印是Y,然后构造函数内打印X;再然后执行本类里的代码,因为有  Y y = new Y();所以先打印Y,最后初始自己的构造函数,打印Z
综上的结果是 YXYZ

评分

参与人数 1技术分 +1 收起 理由
船长 + 1

查看全部评分

回复 使用道具 举报
快乐的黑马 发表于 2014-1-16 18:52
这题考的是创建对象时构造函数初始化的问题:
首先要明确下面一点:子类中所有的构造函数都会默认访问父类 ...

哦,我想起来了,谢谢。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马