我在Java中有以下系统:
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() {...}
答案 0 :(得分:2)
drown()
中的Human
方法应该是(顺便说一句,为什么人类想要淹死动物?):
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
}
答案 1 :(得分:2)
您将声明Animal.drown()
并在Fish
中覆盖它,其中包含相应的'kill code':)。
所以你只需要在每只动物身上调用drown()
,每个实例都会根据其特定类型的方法实现。
public class Human {
public void drown(Animal animal) {
animal.drown();
}
}
答案 2 :(得分:0)
可以根据参数重载方法。您可以使用两种不同的方法:
public void drown(Fish f) {
return;
}
public void drown(LandAnimal a) {
a.drown();
}
然而,应该指出的是,这可以确定某些动物是否会淹没Human
课程的责任,正如其他答案所示,这可以说是有争议的。