让我们说我有一个抽象类Animal和一个抽象方法
public abstract Animal mateWith(Animal mate);
问题是,如果我创建子类Snake和Armadillo,那么这样的调用将是合法的:
mySnake.mateWith(myArmadillo);
但我只希望蛇能够与蛇交配。我需要能够定义这样的东西:
public abstract Animal_Of_My_Class mateWith(Animal_Of_My_Class mate);
这在Java中是否可行?
答案 0 :(得分:7)
救援的自我约束:
abstract class Animal<T extends Animal<T>> {
abstract T mateWith(T mate);
}
然后:
class Animal_Of_My_Class extends Animal<Animal_Of_My_Class> {
Animal_Of_My_Class mateWith(Animal_Of_My_Class mate) { ... }
}
请注意,您不能将T
限制为实施类(例如,您不能要求Animal_Of_My_Class extends Animal<Animal_Of_My_Class>
而不是Animal_Of_My_Class extends Animal<Another_Animal_Of_My_Class>
)。