私が持っている巨大な if ステートメントをリファクタリングしています。それを改善するために私が見つけた方法の 1 つは、ポリモーフィズムと継承を使用することでした。非常に単純化された方法で、これは私のコードにあるものです:
public abstract class Animal {
public abstract void doAction();
}
public class Dog extends Animal {
public void doAction() {System.out.println("run");}
}
public class Cat extends Animal {
public void doAction() {System.out.println("sleep");}
}
public class RunActions {
public void runAction(Dog d) {
d.doAction();
}
public void runAction(Cat c) {
c.doAction();
}
}
public class Start {
public static void main(String args[]) {
Animal animal = new Dog();
new RunActions().runAction(animal); // Problem!
}
}
分かってる。animal.doAction(); を呼び出すだけです。または、アニマルをパラメーターとして受け取るメソッドを RunActions に追加します。
しかし、コンパイラが最後の「runAction(animal)」行を呼び出すことを許可しないのはなぜですか? JVM は実行時に animal が Dog のインスタンスであると認識すべきではありませんか?
それが許可されない特定の理由はありますか?
編集: Dog と Cat を Animal 拡張にするのを忘れていました。修理済み。