黑马程序员技术交流社区

标题: 多态的问题,子类构造的中默认的一句super(); [打印本页]

作者: 罗雪梅    时间: 2012-9-20 15:50
标题: 多态的问题,子类构造的中默认的一句super();
本帖最后由 罗雪梅 于 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啊。执行的时候不是先构造吗,谁能说明白点呢谢谢

作者: 皮卫凯    时间: 2012-9-20 18:13
本帖最后由 皮卫凯 于 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

作者: 罗雪梅    时间: 2012-9-21 13:52
皮卫凯 发表于 2012-9-20 18:13
class X {                                                                  
        Y b = new Y();
  ...

谢谢,回答的真清楚




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