背景:项目中将类中定义的变量直接赋值了,该变量又在重写的函数中使用,重写的函数在父类中的构造函数中调用,重新赋值。但是后续再使用变量的时候发现变量是一开始赋值的值。
public class A {
public A() {
this.print();
}
public void print() {
}
}
public class B extends A {
int x = 10;
public B() {
//print();
}
public B(int x) {
this.x = x;
}
@Override
public void print() { // 覆写父类中的方法
System.out.println("x = " + x);
}
}
public class Main2 {
public static void main(String[] args) {
B b = new B();
b.print();
}
}
结果输出:
x = 0
x = 10分析:第一次的print()方法调用时x还未赋值10,所以采用初始化为0
第二次print()方法调用时x才被赋值10,所以输出10。
还有一点,在定义类中变量直接赋值的时候,该赋值操作会在执行构造器之前进行。(代码中将B的无参构造函数中的注释去掉测试即可)