黑马程序员技术交流社区

标题: 帮忙分析下这个小程序 [打印本页]

作者: 杨文宇    时间: 2012-7-25 11:31
标题: 帮忙分析下这个小程序
本帖最后由 杨文宇 于 2012-7-25 11:45 编辑

class X {
        Y b = new Y();
        X() {
                        System.out.print("X");
        }
}

class Y {
        Y() {
                        System.out.print("Y");
        }
}

class Z extends X {
        Y y = new Y();
        Z() {
                        System.out.print("Z");
        }

        public static void main(String[] args) {
                        new Z();//为什么输出的结果是YXYZ?
        }
}

作者: 乐峰    时间: 2012-7-25 11:40
本帖最后由 聂峰 于 2012-7-25 11:46 编辑

class X

{

        Y b = new Y();//第3步,先初始化类中的成员变量



        X()//第5步,调用构造方法,打印了X

        {

                System.out.print("X");

        }

}



class Y

{

        Y()

        {

                System.out.print("Y");//第4步,被new X()调用,打印了Y        //第7步,被new Z()调用,打印了Y

        }

}



public class Z extends X

{

        Y y = new Y();//第6步,调用super()结束后,初始化本类变量



        Z()

        {

                System.out.print("Z");//第8步,执行构造方法,打印了Z

        }



        public static void main(String[] args)//第1步,main函数入口

        {

                new Z();//第2步,初始化 Z 对象,调用父类构造方法

        }

}

输出结果是:YXYZ
作者: 杨文宇    时间: 2012-7-25 11:48
聂峰 发表于 2012-7-25 11:40
class X

{

明白了:handshake
作者: 李菁    时间: 2012-7-25 11:50
class X {
        Y b = new Y();   实例化Y,走Y的无参构造方法,输出y
        X() {
                        System.out.print("X");   输出x
        }
}

class Y {
        Y() {
                        System.out.print("Y");
        }
}

class Z extends X {
        这个地方隐式的调用了super(),所以要输出父类x输出的内容
        Y y = new Y();   实例化Y,走Y的无参构造方法
        Z() {
                        System.out.print("Z");   输出z
        }

public static void main(String[] args) {
              new Z();//为什么输出的结果是YXYZ?  这就是为什么实例化Z这个类,输出的结果是YXYZ
}






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