non-sealed のサブクラス
出力はどれか。
public class Main {
public static void main(String[] args) {
Vehicle v = new BigTruck();
System.out.println(v instanceof Truck);
}
}
sealed class Vehicle permits Car, Truck {
}
final class Car extends Vehicle {
}
non-sealed class Truck extends Vehicle {
}
class BigTruck extends Truck {
}
- A
true - B
false - C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: Truck は non-sealed なので自由に継承でき、BigTruck は Truck の子クラスです。instanceof Truck は true です。
- B: BigTruck は Truck を継承しているので、instanceof Truck は true になります。
- C: non-sealed にした子クラスは、どのクラスからでも継承できるのでコンパイルできます。
- D: 例外になる処理はありません。
ポイント
- non-sealed を付けたサブクラスは、誰でも継承できる普通のクラスに戻ります。