【发布时间】:2020-08-31 12:26:43
【问题描述】:
我是 Java 编程新手。请考虑以下代码 sn-p。
public class Animal {
public void mate( /*what should I put here?*/ anotherAnimal ) {
}
}
public class Cat extends Animal {
}
public class Dog extends Animal {
}
我想这样编写方法Animal.mate(),当从子类对象调用该方法时,提供给该方法的参数必须是同一子类的对象,否则会触发编译器错误。例如:
Cat cat = new Cat();
Dog dog = new Dog();
Animal randomAnimal = new Animal();
Cat trueLove = new Cat();
cat.mate( dog ); // raises a compiler error
cat.mate( randomAnimal ); //compiler error
cat.mate( trueLove ); //passes compiler check
我问的可能吗?我有一种模糊的感觉,也许可以使用泛型来做到这一点。
【问题讨论】:
-
你可以使用
Animal<A extends Animal>、Cat extends Animal<Cat>和mate(A partner)。 -
怎么样:
Animal a = new Cat(); a.mate(new Animal());你认为这行得通吗? -
@Sweeper 如果你能给我一些让它工作的东西就更好了,但我会很高兴只让
Cat cat = new Cat(); cat.mate( new Cat() )工作的东西 -
所以你认为
a.mate(new Animal());应该编译?我不这么认为。在运行时,a存储了一个Cat对象,而Cat对象不能与Animal对象匹配,对吧?
标签: java oop polymorphism object-oriented-analysis