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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尚志 中级黑马   /  2014-9-4 11:12  /  998 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


如下程序,虚拟机是按什么样的过程执行的呢??

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

4 个回复

倒序浏览
依次分析:
先建立Z对象,由此,Z中建立Y对象,先输出“Y”。
接着,执行Z的构造函数,所以输出“YZ”。
X并未被调用,所以不参与运算。
回复 使用道具 举报
OCTSJimmy 发表于 2014-9-4 11:28
依次分析:
先建立Z对象,由此,Z中建立Y对象,先输出“Y”。
接着,执行Z的构造函数,所以输出“YZ”。

你看错了吧,Z继承了X,X也参与了、、、
我不明白的是Z先建立Y对象呢?还是先执行构造函数呢?
回复 使用道具 举报
OCTSJimmy 发表于 2014-9-4 11:28
依次分析:
先建立Z对象,由此,Z中建立Y对象,先输出“Y”。
接着,执行Z的构造函数,所以输出“YZ”。

已经明白。谢谢回答、、
回复 使用道具 举报
尚志 发表于 2014-9-4 11:40
你看错了吧,Z继承了X,X也参与了、、、
我不明白的是Z先建立Y对象呢?还是先执行构造函数呢? ...

{:3_55:}完蛋走眼了,误人子弟……
那么,假如Z继承X,那么X最优先,由X调用了Y,得到“Y”,后X构造函数,所以输出“X”,与以上连起来则“YX”,后Z的成员变量,则有“Y”,连起来“YXY”,Z的构造函数“Z”
因此最终结果:
“YXYZ”
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马