如何定义一个接口方法来接受Java中的类或其任何子类?

如何定义一个接口方法来接受Java中的类或其任何子类?,java,interface,Java,Interface,假设我有一个名为Animal的类和一个名为AnimalTrainer的接口 public interface AnimalTrainer { void trainAnimal(Animal animal); } 现在,当我想编写一个只训练Lion的实现时,问题就出现了,例如Lion扩展了Animal public class LionTrainer implements AnimalTrainer { public void trainAnimal(Lion lion)

假设我有一个名为Animal的类和一个名为AnimalTrainer的接口

public interface AnimalTrainer
 {
    void trainAnimal(Animal animal);
 }
现在,当我想编写一个只训练Lion的实现时,问题就出现了,例如Lion扩展了Animal

public class LionTrainer implements AnimalTrainer
 {
    public void trainAnimal(Lion lion)
      {
         // code 
      }
 }

但这不起作用。如何在AnimalTrainer中定义trainAnimal方法,以使上述LionTrainer实现成为可能?或者我必须更改LionTrainer实现吗?

您需要键入AnimalTrainer

public interface AnimalTrainer<T extends Animal>
 {
    public void trainAnimal(T animal);
 }

public class LionTrainer implements AnimalTrainer<Lion>
 {
    public void trainAnimal(Lion lion);
 }
public interface AnimalTrainer
{
公共动物(T动物);
}
公共类LionTrainer实现AnimalTrainer
{
公共动物(狮子);
}
使用泛型:

public interface AnimalTrainer<T extends Animal> {
   void trainAnimal(T animal);
}
class LionTrainer implements AnimalTrainer<Lion> {
   public void trainAnimal(Lion lion) {...}
}
public interface AnimalTrainer{
动物(T动物);
}
类LionTrainer实现AnimalTrainer{
公共动物(狮子){…}
}

您应该使用泛型类型

public interface AnimalTrainer<T extends Animal>
 {
    public void trainAnimal(T animal);
 }
public interface AnimalTrainer
{
公共动物(T动物);
}

然后,
LionTrainer实现了AnimalTrainer

或者我在键入时发布的其他两个答案中的任何一个:D(我必须指出,
AnimalTrainer
应该是一个角色。一个
AnimalTrainer
指令应该能够执行
LionTraining
AntTraining
)@Tomhawtakline Ok。上面的例子只是为了举例说明。