Java继承奇怪的行为

Rak*_*esh 5 java oop inheritance

以下代码将输出打印为40而不是30.我无法找出解决方案.请帮助代码.

class Base {

  int value = 0;

    Base() {
      addValue();
    }

    void addValue() {
      value += 10;
    }

    int getValue() {
      return value;
    }
}

class Derived extends Base {

  Derived() {
    addValue();
  }

  void addValue() {
    value +=  20;
  }
}

public class Test{

  public static void main(String[] args) {
    Base b = new Derived();
    System.out.println(b.getValue());
  }
}
Run Code Online (Sandbox Code Playgroud)

Derived构造函数中  的隐式超级引用调用Base构造函数,该构造函数又调用addValue()类中的方法将Base值变量作为10,然后addValue()Derived类中将20添加到值10.因此最终输出为30.

但代码打印40.

yol*_*ole 8

addValue方法在Derived类中被重写.重写方法时,即使在基类中调用时,调用此类实例上的方法也始终调用重写版本.