gpt4 book ai didi

java - 使用父类(super class)/子类引用引用新对象 JAVA

转载 作者:太空宇宙 更新时间:2023-11-04 09:57:47 24 4
gpt4 key购买 nike

我正在学习java,无法理解这个主题。使用父类(super class)引用子类对象。在浏览了多个网站和帖子后,我的困惑更加增加了。示例代码:

 public abstract class Bird {
private void fly() {
System.out.println("Bird is flying");
}
public static void main(String[] args) {
Bird bird = new Pelican();
bird.fly();
}
}
class Pelican extends Bird {
protected void fly() {
System.out.println("Pelican is flying");
}
}

输出是 Bird is Flying - 为什么?

我还有 3 个问题:

Bird bird = new Pelican();
  1. 在上面的部分中,我可以使用什么来代替 Bird 类型(如果有更多扩展 Bird 的类)?我正在准备 OCA 1 考试,这个主题的问题让我很困惑。

  2. 使用这些引用时会输出哪些方法和变量?上面的例子中创建了pelican对象,但是运行的fly方法是bird?

  3. 如果转换完成,我可以使用哪些类型,不能使用哪些类型?

在 stackoverflow 和其他 java 网站上有多个关于此问题的问题,但多个来源、多个答案让我感到困惑。我知道时间很宝贵,但有人可以帮我一劳永逸地消除这个疑问吗?
提前致谢。

最佳答案

为了从子类调用该方法,您必须使用方法重写,也称为运行时多态性。由于您声明的对象是 Bird,并且它有一个无法重写的私有(private)方法 Fly,因此您的输出将是“Bird is Flying”。

但是,如果您将其初始化为

Pelican pelican = new Pelican();

那么输出将是“Pelican is moving”

您可以在这里阅读更多相关信息https://www.geeksforgeeks.org/dynamic-method-dispatch-runtime-polymorphism-java/

关于java - 使用父类(super class)/子类引用引用新对象 JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53879993/

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