《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其实仅仅时代表了初始化父类数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值