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/