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

看程序,写结果,结果是?
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仅仅表示先要让父类初始化而已!!

1 个回复

倒序浏览
结果是:YXYZ
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马