在Java中使用多态性替换If/Else



我想从代码中删除许多if/else条件。我选择多态性来代替它。我已经理解了方法。我正在复制我在网上找到的资料。

abstract class Bird {
// ...
abstract double getSpeed();
}
class European extends Bird {
double getSpeed() {
return getBaseSpeed();
}
}
class African extends Bird {
double getSpeed() {
return getBaseSpeed() - getLoadFactor() * numberOfCoconuts;
}
}
class NorwegianBlue extends Bird {
double getSpeed() {
return (isNailed) ? 0 : getBaseSpeed(voltage);
}
}
// Somewhere in client code
speed = bird.getSpeed();

我同意上面的设计。但我怀疑bird对象的实例化是否依赖于另一个if/else条件。那么如何解决呢?我很困惑。请原谅我,这可能很琐碎。例如

if (LocalDateTime.now().getMonth().toString().equalsIgnoreCase("march")) {
Bird aBird = new European();
} else if (LocalDateTime.now().getMonth().toString().equalsIgnoreCase("August")) {
Bird aBird = new African();
}
speed = aBird.getSpeed();

如果/否则,请告诉我该怎么办。

您必须使用if/else,因为构造函数仅适用于已实现的类

你可以这样做得更好一点:

Bird aBird = null;
String month = LocalDateTime.now().getMonth().toString();
if ("march".equalsIgnoreCase(month)) {
aBird = new European();
} else if ("August".equalsIgnoreCase(month)) {
aBird = new African();
}
speed = aBird.getSpeed();

工厂的实施。

最新更新