我怎样才能有一个接受"my type"类型参数的抽象方法?

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中可行吗?

And*_*ner 7

救援的自我约束:

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>).