在初始化类时,在父类方法中对子类变量赋值,之后走完父类构造方法后,在完成子类构造方法时,打印该变量仍为默认值。
由于初始化变量时,给了变量一个默认值,加载顺序为构造函数、变量,导致在构造函数中赋值后,加载变量时再次赋为默认值。
解决 方法:
1、不给变量默认值。
2、添加static关键子,让变量优先与构造函数加载。
代码:
public abstract class Base{ public Base(int x){ setInfo(x); } public abstract void setInfo(int x); }
//---------------------------------------------------------
public abstract class SecondInfo extends Base{ public SecondInfo(int x){ super(x); } }
//---------------------------------------------------------------
public class Three extends SecondInfo{ private int x = 0; public Three(){ super(5); Log.d("tiger","this.x : "+ x); } @Override public void setInfo(int x) { this.x = x; Log.d("tiger","this x setInfo : "+x); } }
调用:
Three a = new Three();
打印:
this x setInfo : 5
this.x : 0