【发布时间】:2014-11-04 19:04:58
【问题描述】:
在我的程序中,我有抽象类 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 更好的方法来强制执行此操作?
【问题讨论】:
标签: java oop polymorphism instanceof