被赋予子类对象值的超类对象如何执行子类的重载方法?

How can a superclass object which is assigned the value of a subclass object execute an overloaded method of subclass?

class A
{
    private int m;
    public void display()
    {
        System.out.println(m);  
    }
}
class B extends A
{
    int n;
    B(int b)
    {
        this.n = b; 
    }
    public void display()
    {
        super.display();
        System.out.println(n);
    }
}
class trial
{
    public static void main(String args[])
    {
        A a = new A();
        B b = new B(10);
        a = b;
        a.display();
    }
}

在上面的代码中,变量a在调用display()函数时如何执行子类display()——子类display()的类型是[=15] =] 并且不应存在于类型为 A 的对象中。我有这个疑问,因为显然超类变量可以引用子类对象。 但是,他们将无法访问子类中存在的元素(变量、函数等)。但是上面的代码违反了这个原则。

执行以下代码时在您的代码中

a = b;

变量a引用了一个B对象。因为 A 是 B 的 superclass 它可以持有 Child Class 实例的引用。 相当于 A b = new B(10); 现在如果我们调用 b.display();

//B版本的display()被调用。

这在 JAVA 中称为运行时多态性。使用它可以覆盖子对象中的父 class 方法。但是您不能访问 Child class 的实例变量或仅存在于 Child Class.

中的方法

请阅读 https://www.geeksforgeeks.org/dynamic-method-dispatch-runtime-polymorphism-java/