gpt4 book ai didi

对扩展抽象类的具体类的 Java 接口(interface)引用

转载 作者:搜寻专家 更新时间:2023-11-01 03:56:59 24 4
gpt4 key购买 nike

我试图理解为什么 Java 以这种方式工作。

假设我有:

  1. 接口(interface) - IAnimal
  2. 抽象类——哺乳动物
  3. 具体类 - 狗

Mammal 实现了 IAnimal 并且 Dog 扩展了 Mammal

Mammal 声明并实现方法 breastFeed()(当然 Animal 没有这个签名,因为不是每个动物都是哺乳动物)

现在我想创建一个狗对象,接口(interface)将引用这只狗,这样:

IAnimal dog = new Dog();

在运行时的某个地方,我可能想使用 breastFeed 方法,但狗对象无法识别此方法。

一种解决方案是在 Dog 类中实现此方法其他解决方案是从实现接口(interface)的抽象类中引用 Dog,在这种情况下,我将所有内容都指向 dog 对象。

我发现这些解决方案困惑而奇怪。有什么想法吗?也许我遗漏了一些东西并且有一些更好更清洁的解决方案?

谢谢你,约阿夫。

最佳答案

这是有效的,因为您的继承链。但这里的问题是 dog 被声明为 IAnimal 并且它只公开该接口(interface)具有的方法而不是实现中的方法。如果您需要访问 breastFeed() 方法,您应该将值转换为子类。

关于对扩展抽象类的具体类的 Java 接口(interface)引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51174102/

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