分配了子类对象值的超类对象如何执行子类的重载方法?


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();
}
}

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

在代码中执行以下代码时

a = b;

变量 A 引用 B 对象。由于 A 是 B 的超类,它可以保存子类实例的引用。 它相当于A b = 新的 B(10(;现在,如果我们调用b.display((;

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

这在 JAVA 中称为运行时多态性。使用它可以重写子对象中的父类方法。但是您无法访问子类的实例变量或仅存在于子类中的方法。

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

最新更新