黑马程序员技术交流社区

标题: 关于继承和构造初始化的面试题求解 [打印本页]

作者: date1130    时间: 2014-11-4 10:28
标题: 关于继承和构造初始化的面试题求解
  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.                 //super
  16.                 System.out.print("Z");
  17.         }
  18.         public static void main(String[] args) {
  19.                 new Z();
  20.         }
  21. }
复制代码

看程序写结果的题,分层初始化这个词语该怎么理解?做这题需要注意什么?晕头转向的。。
作者: zxbzxb333    时间: 2014-11-4 11:50
结果是YXYZ吧,视频里这一块有讲过啊,建议你再复习一下,我看的第一遍也是没多久就忘了..就这道题而言,初始化的顺序为:子类成员变量默认初始化——父类构造函数——子类成员变量显示初始化——子类构造函数
作者: 李春江    时间: 2014-11-4 12:51
本帖最后由 李春江 于 2014-11-4 12:58 编辑

对照你自己的代码

运行结果:Y X Y Z

结果分析:
1.主函数在Z类里面,所以先执行20-21行的代码

2.由于Z继承了X类,所以在初始化自己的字段和构造方法之前,会先初始化父类的字段和构造方法。
      即:先走X类的字段第2(跳转到第9-11行)行,再X类构造方法第(3-5)行

3.最后初始化自己的字段和构造方法。
     即:先走Z类的字段 第15(跳转到第9-11行)Z类的构造方法第(16-19)行
作者: 田峻菘    时间: 2014-11-4 13:16
楼上正解
作者: lighter    时间: 2014-11-4 13:32
应该是YXYZ吧
作者: wanmei0398    时间: 2014-11-4 18:30
李春江 发表于 2014-11-4 12:51
对照你自己的代码

运行结果:Y X Y Z

好详细,点个赞!
作者: OnlyStyle    时间: 2014-11-4 19:25
学习了,果然还是有许多地方不知道啊。
作者: 焦旭宁1    时间: 2014-11-4 22:34
楼长正解!!!!
作者: 高昌德    时间: 2014-11-4 23:40
new 类名();都干了什么?
1:函数特有属性默认初始化。
2:函数构造代码块初始化。
3:函数构造函数初始化。




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