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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© aohn1117 中级黑马   /  2015-11-22 23:38  /  355 人查看  /  7 人回复  /   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

7 个回复

正序浏览
Myth、骞 发表于 2015-11-27 11:12
解析:
       public class Z extends X {里面 的  Y y = new Y()的这一部分 称为 构造代码块,
     作用 ...

报纸楼的理解没有问题。我觉得它里面好像隐含了重写的功能。
Yy=new Y();与Y b=new Y();you有重写。
个人见解。求大神解释。
回复 使用道具 举报
wyasln 中级黑马 2015-11-27 12:54:21
7#
B吧,先执行Z类的初始化代码,再执行构造函数
回复 使用道具 举报
流程图

QQ截图20151127121646.jpg (125.44 KB, 下载次数: 1)

QQ截图20151127121646.jpg
回复 使用道具 举报
解析:
       public class Z extends X {里面 的  Y y = new Y()的这一部分 称为 构造代码块,
     作用:给对象 进行初始化,
     所以 说,new 对象时,它会 执行,且 优先于构造函数,so:  第一个就是Y

   构造代码块与构造函数的区别:

   构造代码块:给所有对象统一初始化,
   构造函数:给对应的对象初始化,
回复 使用道具 举报
运行出来是D不过不知道为什么
回复 使用道具 举报
C吧。子类继承父类,先调用父类的构造函数,所以先输出X
回复 使用道具 举报
B?求解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马