サブクラスの判定
出力はどれか。
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
System.out.println((a instanceof Animal) + " " + (a instanceof Dog d ? d.bark() : "no"));
}
}
class Animal {
}
class Dog extends Animal {
String bark() { return "woof"; }
}
- A
true woof - B
false woof - C
true no - D コンパイルエラーになる
正解と解説を見る
正解: A
- A: Dog は Animal のサブクラスなので true、Dog でもあるのでパターン変数 d で bark() を呼んで "woof" です。
- B: サブクラスのインスタンスは、親の型の instanceof でも true です。
- C: a の実体は Dog なので、
a instanceof Dog dは true です。 - D: パターン変数は条件演算子の中でも使えます。
ポイント
- instanceof は、親クラスの型で判定しても true になります。
- パターン変数は条件演算子
? :の中でも使えます。