被赋予子类对象值的超类对象如何执行子类的重载方法?
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/
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/