許可されたサブクラスの修飾子
このコードを実行するとどうなるか。
public class Main {
public static void main(String[] args) {
System.out.println("ok");
}
}
sealed class Vehicle permits Car {
}
class Car extends Vehicle {
}
- A
okと出力される - B 実行時に例外が発生する
- C コンパイルエラーになる
- D 何も出力されない
正解と解説を見る
正解: C
- A: sealed クラスの子クラスに final / sealed / non-sealed が付いていないので、コンパイルエラーです。実行まで進まないので、何も出力されません。
- B: コンパイルの時点でエラーになるので、実行時の例外にはなりません。
- C: permits で許可した子クラスには、final・sealed・non-sealed のどれかを付ける必要があります。Car に付いていないのでコンパイルエラーです。
- D: コンパイルエラーなので実行できません。
ポイント
- sealed クラスの許可されたサブクラスには、
final・sealed・non-sealedのどれかを付けなければなりません。