JAVA构造方法和属性初始化顺序

在一个小问题上折腾了半天,刚开始感觉很奇怪怎么会这样,最后想想确实是这样,只是自己把基础忘记了皱眉

 

 

public class ClassA {

	public ClassA(int v){
		init(v);
	}
	
	public void init(int v){};
}

 

 

 

public class ClassB extends ClassA {

	int v = 1;
	
	public ClassB(){
		super(2);
	}
	
	@Override
	public void init(int v) {
		this.v = v;
		System.out.println("set v = "+v);
	}

	public static void main(String[] args) {
		ClassB c = new ClassB();
		System.out.println("main v = "+c.v);
	}
}

 

 

输出

 

set v = 2
main v = 1

 

 

原因:

int v = 1; 的顺序是 先定义一个变量v,然后执行父类的构造方法,构造方法返回后设置v的值为1。所以在父类的构造方法内设置变量的值是无效的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值