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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 罗雪梅 于 2012-9-21 13:53 编辑

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();
        }
}

这个的运行结果为什么是YXYZ呢,我自己分析的是这样的:Z继承了X所以new Z();的时候会去他会先去调用父类构造,因为隐藏着一句super();,但那结果就应该是XZ那个Y怎么来的呢,没有new Y()啊,也没有人继承Y啊。执行的时候不是先构造吗,谁能说明白点呢谢谢

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 希望多多加油

查看全部评分

2 个回复

倒序浏览
本帖最后由 皮卫凯 于 2012-9-20 18:14 编辑

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();                                 
        }
}

读程序的步骤:
主函数 new  Z()   
创建Z类对象,则执行Z
因为class Z extends  X  
则   执行class X                                                           
        {    Y b = new Y();        //读到这,建立Y类对象,则要执行了Y类,则打印Y
             X() {  System.out.print("X");  }      //这里则执行了X类,则打印X
         }  
执行完父类X后,再执行Z类
       {
          Y y = new Y();                   //这里则又要去执行Y类,打印Y
         Z() {
                        System.out.print("Z");     //这打印Z
               }
        }

所以 打印结果为YXYZ

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
皮卫凯 发表于 2012-9-20 18:13
class X {                                                                  
        Y b = new Y();
  ...

谢谢,回答的真清楚
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马