java - 抽象类继承具有不同参数类型的抽象方法

标签 java oop inheritance

假设我有一个带有方法的抽象类 Animal:

public abstract void fetch(Animal ani);

然后我有一个类,它通过以下内容扩展了这个抽象类:

public class GoldenRetriever extends Animal {
       public void fetch(GoldenRetriever pup) { 
             pup.paws = "I have paws"; 
       }
}

我希望每个扩展 Animal 的类都有一个 fetch() 方法。然而,fetch 方法分配了一些特定于所讨论的动物的独特特征(狗的爪子、猫的爪子等)。例如,cat 的 fetch() 将采用参数 fetch(FelineCat kitty) 并表示:

public void fetch(FelineCat kitty) { kitty.claws = "I have claws."; }

因此,fetch 方法接受扩展抽象类 Animal 的参数(因此是动物)。我在 Animal 中定义了方法 fetch() 来获取 Animal 类型的任何参数。对我来说,这是有道理的,因为猫和狗都是动物,但 Java 说 GoldenRetriever 无法重写抽象方法 fetch(Animal ani)。为什么是这样?

最佳答案

不确定我是否百分百正确地理解了您的问题,但我认为我对您的问题有某种解决方案。以下代码有效,它可能不是最佳的,因为您总是必须使用通用参数,但至少输入是正确的。

public abstract class Animal<T extends Animal> {

    public abstract void fetch(T ani);
}

public class GoldenRetriever extends Animal<GoldenRetriever> {

    @Override
    public void fetch(GoldenRetriever ani) {

    }
}

关于java - 抽象类继承具有不同参数类型的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35955204/

相关文章:

c++ - 创建不同对象的数组

java - Java中的Max-Flow图模拟

java - 使用Thread查找2个键的最小距离

java - 一元 "~"运算符 - 这里到底发生了什么?

javascript - 类似 Java/C# 的类定义在 Javascript 中不起作用吗?

javascript - 原型(prototype)继承 : Why is false not equal to false?

java - 获取 HashMap 中元素子集的有效方法是什么?

oop - 如何获取从 django 中的同一父类继承的所有实例

c# - 为什么在c#的Inheritance方法中使用override而不是函数

java - JPA 中的继承映射