黑马程序员技术交流社区

标题: java基础(深入浅出版) 面试题总结之day08:面向对象--继承面试题3 [打印本页]

作者: huang_bing_hua    时间: 2016-2-23 19:53
标题: java基础(深入浅出版) 面试题总结之day08:面向对象--继承面试题3
看程序,写结果,结果是?
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() {
                //super();
                System.out.print("Z");
        }
        public static void main(String[] args) {
                new Z();
        }
}
考察知识点(两个知识点的回顾+两个知识点的深入理解):
1.回顾的两个知识点:
        (1.)当成员变量是引用类型的时候,例如类或数组(本题是类),
             定义的格式是:  类名 对象名 = new   类名()
        (2.)一个类数据初始化的顺序:
              默认初始化(例如成员变量a是采用变量赋值的第一种形式时,即int a;并不赋值,那么系统默认它的                     值是0),
             显示初始化(本题中就是如此)
             构造初始化
2.深入理解的两个知识点
          (1.)分层初始化的彻底性:先进行父类的初始化,再进行子类的初始化,也就是说父类一直到构造初始化结束后再进行子类的初始化
          (2.)super()位置带来的困惑:我们知道super关键字可以理解为父类的引用,子类每个构造方法执行前都得先访问父类的构造方法,所以z类的构造方法中默认存在super();这条语句(而且必须在构造体里的第一行!!)可是初始化顺序却不是按照父类的成员初始化--子类的成员初始化-父类的构造初始化-子类的构造初始化,super仅仅表示先要让父类初始化而已!!

作者: huang_bing_hua    时间: 2016-2-23 19:55
结果是:YXYZ




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