在一个小问题上折腾了半天,刚开始感觉很奇怪怎么会这样,最后想想确实是这样,只是自己把基础忘记了
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。所以在父类的构造方法内设置变量的值是无效的。