假设我有一个带有方法的抽象类 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/