gpt4 book ai didi

java - 被赋予子类对象值的父类(super class)对象如何执行子类的重载方法?

转载 作者:行者123 更新时间:2023-12-01 19:13:32 24 4
gpt4 key购买 nike

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() 的类型为 B,不应存在于类型为 A 的对象中。我有这个疑问,因为显然父类(super class)变量可以引用子类对象。然而,他们将无法访问子类中存在的元素(变量、函数等)。但上面的代码违反了这个原则。

最佳答案

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

a = b;

变量a引用B对象。由于 A 是 B 的父类(super class),因此它可以保存子类实例的引用。相当于A b = new B(10);现在如果我们调用 b.display();

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

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

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

关于java - 被赋予子类对象值的父类(super class)对象如何执行子类的重载方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59445792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com