首页 > 解决方案 > 这个向上转换的演示如何工作?

问题描述

我创建了一个向上转换的演示,我不明白这段代码是如何工作的,或者我可以更具体地说明为什么在派生类完成调度时还要调用基类的构造函数。甚至没有调用基类的构造函数。我什至没有在任何地方使用超级关键字,而不是如何调用基类的构造函数。

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;
    }
}
class Test{
    public static void main(String args[]){
        Base b=new Derived();
        System.out.println(b.getValue());
    }
}

标签: javaupcastingdynamic-dispatch

解决方案


当你创建一个新Derived对象时,它的构造函数将被调用。由于Derived有一个超类Base,它的构造函数将首先被调用。在构造函数中,addValue将调用被覆盖的方法,这导致临时值 20。之后,调用addValueofDerived并将另一个 20 添加到value. 最终结果为 40。

由于您没有使用super自己调用超类的构造函数,Java 会自动执行此操作:

Derived() {
    super();
    addValue();
}

推荐阅读