如何定义一个接口方法来接受Java中的类或其任何子类?
假设我有一个名为Animal的类和一个名为AnimalTrainer的接口如何定义一个接口方法来接受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)
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。上面的例子只是为了举例说明。