gpt4 book ai didi

Java:向上转换为父类(super class)并从子类调用函数

转载 作者:行者123 更新时间:2023-12-02 02:25:43 25 4
gpt4 key购买 nike

我有两个类,Dog 和 Beagle。

Dog 类有方法:bark()

Beagle 类有方法:bark() 和 Hunt()

如果我这样做

Dog myDog = new Beagle()
myDog.bark()

这会调用 Beagle 的 bark 函数。但是如果我说,

myDog.hunt()

Eclipse 生成错误。如果myDog仍然是 Beagle 的一个实例(假设它调用 Beagle 的 bark() 函数)它应该仍然能够调用 hunt()功能?或者如果它不再是 Beagle 类型,为什么它不调用 Dog 的 bark()功能?我不知道如何将这两种行为相互协调。

最佳答案

假设您正在编写一个函数

void something(Dog myDog) {
...
}

您可以在 myDog 上调用什么?您对它是什么类型的一无所知。您不知道它是Beagle,还是其他什么。但是您希望能够传入 BeagleRetriever 或任何其他种类的狗,并且可以选择狗的种类。无论是方法参数还是局部变量,情况都是完全一样的。

当您将 myDog 定义为 Dog 类型时,您告诉 Java 忘记有关 myDog 的所有内容对象,只不过它是一个Dog。 Java 正在做你告诉它的事情。它忘记了 myDog 还有除 Dog 中的 bark() 之外的任何方法。

但是,实际使用的 bark 方法的实现取决于对象在运行时所具有的实际类。该方法被选择为“实时”,基于传入的实际实现。

可以使用哪些方法是在编译时根据变量的类型决定的。使用哪种方法的实现是在运行时根据存储在该变量中的实际对象及其创建方式决定的。

关于Java:向上转换为父类(super class)并从子类调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803691/

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