在我的程序中,我有抽象类Animal和Flower。动物吃花,但每只动物只能吃某种类型的花(例如犀牛只吃玫瑰,海龟吃郁金香)。作为抽象方法的参数的子类
现在我的代码基本上是这样的:
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
执行此更好的方法?