関係のないクラスへのキャスト
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
Dog d = new Dog();
Cat c = (Cat) d;
}
}
class Dog {
}
class Cat {
}
- A 何も出力されずに終わる
- B 実行時に例外が発生する
- C コンパイルエラーになる
- D
nullと出力される
正解と解説を見る
正解: C
- A: 継承関係のないクラスへのキャストはコンパイルエラーなので、実行できません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: Dog と Cat には継承関係がないので、(Cat) d はコンパイルの時点で不可能と判断されエラーになります。
- D: コンパイルエラーなので実行できません。
ポイント
- 親子関係の無いクラス同士のキャストは、絶対に成功しないのでコンパイルエラーです。
「参照型のキャストとポリモーフィックなメソッド呼び出し」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)