Jac*_*k M 6 java oop abstract-class
假设我有一个带抽象方法的抽象类Animal
public abstract Animal mateWith(Animal mate);
Run Code Online (Sandbox Code Playgroud)
问题是,如果我创建子类Snake和Armadillo,那么这样的调用将是合法的:
mySnake.mateWith(myArmadillo);
Run Code Online (Sandbox Code Playgroud)
但我只希望蛇能够与蛇交配.我需要能够定义这样的东西:
public abstract Animal_Of_My_Class mateWith(Animal_Of_My_Class mate);
Run Code Online (Sandbox Code Playgroud)
这在Java中可行吗?
救援的自我约束:
abstract class Animal<T extends Animal<T>> {
abstract T mateWith(T mate);
}
Run Code Online (Sandbox Code Playgroud)
然后:
class Animal_Of_My_Class extends Animal<Animal_Of_My_Class> {
Animal_Of_My_Class mateWith(Animal_Of_My_Class mate) { ... }
}
Run Code Online (Sandbox Code Playgroud)
请注意,您不能限制T为实现类(因为,您不能要求Animal_Of_My_Class extends Animal<Animal_Of_My_Class>而不是Animal_Of_My_Class extends Animal<Another_Animal_Of_My_Class>).
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |