《java入门第一季》之面向对象(一个易错面试题)

这个面试题有点难度,有一些饶。不明白可以在下面讨论。还是值得搞懂的。

/
*
	看程序写结果:
		A:成员变量的问题
			int x = 10; //成员变量x是基本类型
			Student s = new Student(); //成员变量s是引用类型
		B:一个类的初始化过程
			成员变量的初始化
				默认初始化。
				显示初始化。
				构造方法初始化
		C:子父类的初始化(分层初始化)
			先进行父类初始化,然后进行子类初始化。
			
	结果:
		YXYZ
		
	问题:
		虽然子类中构造方法默认有一个super()
		(初始化)的时候,(不是)按照那个顺序进行的。
		(而是)按照(分层)初始化进行的。
		(它仅仅表示)要先初始化父类数据,再初始化子类数据。
*/
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();//Y
	Z() {
		//super()隐含一个super(),不代表执行,仅仅表示要(先初始化)父类数据,隐含调用了父类中的无参构造方法,最后再初始化子类数据
		
		System.out.print("Z");//Z
	}
	public static void main(String[] args) {
		new Z(); //先去初始化父类x,再去访问子类z
	}
}
易错答案:YYXZ.因为没考虑到super其实仅仅时代表了初始化父类数据
原文地址:https://www.cnblogs.com/wanghang/p/6299862.html