首页 > 解决方案 > 为什么我可以从超类访问被覆盖的子类方法?

问题描述

为什么method()调用被覆盖的子类method2而不是method2BaseClass

public class BaseClass {
    public void method(){
        System.out.println("method() called");
        method2();
    }
    public void method2(){
        System.out.println("method2() called");
    }
}

public class ChildClass extends BaseClass {
    public void method2(){
        System.out.println("method2() from BaseClass");
    }
}


public class Main {

    public static void main(String[] args) {
        ChildClass obj = new ChildClass();
        obj.method();
    }
}

标签: javaooppolymorphism

解决方案


这就是运行时多态性(Dynamic Method Dispatch)的概念。因为您将对象(实例)分配ChildClassobj引用变量,所以它将调用method子类。

总是首先调用创建实例的类的方法。如果该特定子类中不存在该方法,则调用父类继承的方法。


推荐阅读