黑马程序员技术交流社区

标题: 程序执行流程 [打印本页]

作者: 小小瓶盖❤    时间: 2014-1-16 17:44
标题: 程序执行流程
运行以下代码片段,输出结果是?( 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
谁能帮我分析一下吗?
作者: 快乐的黑马    时间: 2014-1-16 18:52
这题考的是创建对象时构造函数初始化的问题:
首先要明确下面一点:子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每个子类构造内的第一行都有默认的语句super();
好了,你先的找到主函数,因为只有一条线程,new Z(),Z会访问父类构造函数,但父类先   Y b = new Y();所以打印是Y,然后构造函数内打印X;再然后执行本类里的代码,因为有  Y y = new Y();所以先打印Y,最后初始自己的构造函数,打印Z
综上的结果是 YXYZ
作者: 小小瓶盖❤    时间: 2014-1-16 20:57
快乐的黑马 发表于 2014-1-16 18:52
这题考的是创建对象时构造函数初始化的问题:
首先要明确下面一点:子类中所有的构造函数都会默认访问父类 ...

哦,我想起来了,谢谢。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2