class Animal {
String sound() { return "..."; }
}
class Dog extends Animal {
String sound() { return "Woof"; }
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
System.out.println(a.sound());
}
}
選択肢
- あなたの回答
- 正解
正解
B. Woof
詳細解説
変数 a の型は Animal ですが実体は Dog です。インスタンスメソッドは実行時の実体の型で解決されるため Dog の sound() が呼ばれ Woof が表示されます。
なぜ他の選択肢が違うのか
- 参照型が Animal でもオーバーライドされたメソッドは実体の型で動きます。
- Dog は Animal のサブクラスなのでコンパイルできます。
- キャストはしていないため ClassCastException は発生しません。
罠ポイント
ポリモーフィズムではインスタンスメソッドの解決が実行時に行われます。static メソッドやフィールドとは異なります。