キャストしてから呼ぶ
出力はどれか。
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
if (a instanceof Dog) {
Dog d = (Dog) a;
d.fetch();
}
}
}
class Animal {
}
class Dog extends Animal {
void fetch() { System.out.println("fetch"); }
}
- A
fetch - B 何も出力されない
- C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: a の実体は Dog なので instanceof は true です。Dog にキャストすると fetch() が呼べます。
- B: a instanceof Dog は true なので、if の中が実行されて出力されます。
- C: Dog 型の変数 d からなら fetch() を呼べるので、コンパイルできます。
- D: 実体が Dog なので、キャストしても例外は発生しません。
ポイント
- instanceof で確かめてからキャストすれば、ClassCastException を避けられます。
「参照型のキャストとポリモーフィックなメソッド呼び出し」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)