class Animal {}
class Cat extends Animal {}
class Dog extends Animal {}
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
Cat c = (Cat) a;
System.out.println("done");
}
}
選択肢
- あなたの回答
- 正解
正解
C. 実行時に ClassCastException が発生する
詳細解説
a の実体は Dog なので Cat へキャストすることはできません。コンパイルは通りますが実行時に ClassCastException がスローされます。
なぜ他の選択肢が違うのか
- 実体が Dog であるためキャストに失敗し done は表示されません。
- Animal → Cat へのキャスト自体はコンパイル時にチェックされません。
- null が表示されるのではなく例外がスローされます。
罠ポイント
ダウンキャストはコンパイルは通りますが実行時に失敗することがあります。instanceof でチェックしてからキャストするのが安全です。