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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class X {
  2.         Y b = new Y();
  3.         X() {
  4.                         System.out.print("X");
  5.         }
  6. }

  7. class Y {
  8.         Y() {
  9.                         System.out.print("Y");
  10.         }
  11. }

  12. public class Z extends X {
  13.         Y y = new Y();
  14.         Z() {
  15.                         System.out.print("Z");
  16.         }

  17.         public static void main(String[] args) {
  18.                         new Z();
  19.         }
  20. }
复制代码

输出结果是什么?求详细的解答过程。

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 淡定

查看全部评分

3 个回复

倒序浏览
输出结果:YXYZ
new Z();先找到Z的构造函数,又看Z继承自X,所以在初始化X之前应该先调用X默认构造函数。
而又发现X类中有一个内嵌对象y。所以又先要初始化内嵌对象y,调用Y类的构造函数。先输出Y。然后再回到X的构造函数输出X。X类的构造函数执行完后,再回到Z的构造函数。而又发现Z类中又有一个内嵌对象y。所以还要先初始化内嵌对象y,调用Y类的构造函数。再次输出Y。然后再返回执行Z的构造函数最后输出Z
(注意一点:如果一个类中有内嵌对象的初始化,要先对内嵌对象的初始化,再对本类的对象初始化)

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 很给力!

查看全部评分

回复 使用道具 举报
输出结果是:YXYZ,子类的构造函数第一句都有有一句隐式的super()。剩下的就好理解了
回复 使用道具 举报
这个可以使用eclipse在main主程序内设置一个断电,查看一下程序流程!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马