public class Human {
public void drown(Animal animal) {
if (animal instanceOf Fish) {
return;
} else {
animal.die();
}
}
}
public abstract class LandAnimal extends Animal{...}
public class Tiger extends LandAnimal{...}
public abstract class Fish extends Animal {...}
public class Trout extends Fish {...}我想过要添加一个方法
public abstract boolean drownable() {...}在Animal类中,但我不能访问Animal类的代码。据我所知,使用instanceOf被认为是糟糕的OOP实践。在这种情况下,如何避免使用instanceOf?谢谢。
发布于 2013-06-16 01:36:32
Human中的drown()方法应该是(顺便问一下,为什么人类想要淹没动物?):
public void drown(Animal animal) {
animal.drown();
}并且每个Animal将知道要做什么,例如:
// in class Tiger
public void drown() {
die();
}
// in class Fish
public void drown() {
// do nothing, fish can't drown
}发布于 2013-06-16 01:38:26
您可以声明Animal.drown()并在Fish中覆盖它,其中包含适当的“kill code”:)。因此,您只需在每个动物上调用drown(),每个实例将根据其特定类型的方法实现来执行操作。
public class Human {
public void drown(Animal animal) {
animal.drown();
}
}发布于 2013-06-16 01:43:37
方法可以根据它们的参数进行重载。您可以使用两种不同的方法:
public void drown(Fish f) {
return;
}
public void drown(LandAnimal a) {
a.drown();
}然而,应该注意的是,这使得确定某些动物是否会被淹没是Human类的责任,正如其他答案所示,这是有争议的。
https://stackoverflow.com/questions/17126168
复制相似问题