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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨文宇 中级黑马   /  2012-7-25 11:31  /  1825 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨文宇 于 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?
        }
}

3 个回复

倒序浏览
本帖最后由 聂峰 于 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:40
class X

{

明白了:handshake
回复 使用道具 举报
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
}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马