在我的程序中,我有动物和花卉抽象类。动物会吃花,但每个动物只能吃某种类型的花(例如,犀牛只吃玫瑰,乌龟只吃郁金香)。
现在,我的代码基本上看起来像这样:
public abstract class Animal {
abstract boolean eatFlower(Flower f);
}
public class Rhino extends Animal {
boolean eatFlower(Flower f) {
if(!(f instanceof Rose)) return false;
return (f.eaten = true);
}
}
public class Turtle extends Animal {
boolean eatFlower(Flower f) {
if(!(f instanceof Tulip)) return false;
return (f.eaten = true);
}
}
我正在使用
instanceof
来实现这种区分,即每个动物只吃一种花。我想通过将Turtle和Rhino的方法签名分别更改为eatFlower(Tulip t)
和eatFlower(Rose r)
来实现,但是我认为这在Java中是不可能的。有没有比使用
instanceof
强制执行此方法更好的方法? 最佳答案
您可以使用泛型。像这样:
public abstract class Animal<T extends Flower> {
abstract void eatFlower(T f);
}
public class Rhino extends Animal<Rose> {
void eatFlower(Rose f) {
}
}