javaSE学习(8):面向对象:继承的一个面试题小练习,程序的输出结果是:为什么?

题目1(面试题):程序的输出结果是:为什么?

class X {
 2    Y b = new Y();//1
 3        X() {
 4    System.out.print("X");//2
 5    }
 6}
 7class Y {
 8    Y() {
 9    System.out.print("Y");
10    }
11}
12public class Z extends X {
13        Y y = new Y();//3
14        Z() {
15        System.out.print("Z");//4
16        }
17public static void main(String[] args) {
18            new Z(); 
19        }
20}

解答思路:

1.首先加载z.class,不过,在此之前会先加载父类X.class,X.class中并没有静态代码块,所以什么都不执行。

2.jvm执行main方法,运行new Z();

3.先将父类中定义的数据进行显示初始化,所以执行 Y b = new Y();输出Y。

4.再执行父类的构造方法,输出X;

5.再将子类中定义的变量进行显示初始化,输出Y

6.最后执行子类的构造代码块,输出Z

7.最终的顺序为:YXYZ

8.遇到extends,就要知道,先初始化父类数据,然后初始化子类数据。 分层初始化。  

super在这里仅仅表示要先初始化父类数据。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值