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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© li2622480 中级黑马   /  2015-12-9 14:03  /  720 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class X{
        Y y=new Y();
        public X(){
                System.out.print("X");
        }
}
class Y{
        public Y(){
                System.out.print("Y");
        }
}
public class Z extends X{
        Y y=new Y();
        public Z(){
                System.out.print("Z");
        }
        public static void main(String[] args) {
                new Z();
        }
}
大家帮忙看看这个题是什么答案,学得不扎实,不会做了。

3 个回复

倒序浏览
答案是YYXZ
回复 使用道具 举报
1,new Z();会先去看它的构造方法, 但是它的构造方法第一行是有一个隐式的super(),所以回去访问父类classX,而父类的属性会先初始化,所以Y y=new Y();会执行,所以先输出Y;
2,父类成员初始化完成后,会执行父类的构造函数,所以第二输出X;
3,父类初始化完成后,回来执行本类的成员变量初始化Y y=new Y(),所以会输出Y
4,执行本类构造函数,输出Z
所以应该是YXYZ   我也不太确定是这样,请楼下大神继续指正
回复 使用道具 举报 1 0
口诀:父静子静,父构子构
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马