class Base {
final void show() {
System.out.println("Base");
}
}
class Sub extends Base {
void show() {
System.out.println("Sub");
}
}
public class Main {
public static void main(String[] args) {
new Sub().show();
}
}
選択肢
- あなたの回答
- 正解
正解
C. コンパイルエラーになる
詳細解説
final が付いたメソッドはサブクラスでオーバーライドできません。Sub で同じシグネチャのメソッドを定義しているためコンパイルエラーになります。
なぜ他の選択肢が違うのか
- final メソッドのオーバーライドはコンパイル時に検出されます。
- Sub の show() はコンパイルエラーになるため実行されません。
- 実行段階に到達しないため実行時エラーにはなりません。
罠ポイント
final クラスはサブクラス化自体が不可、final メソッドはオーバーライドのみが不可です。