class Parent {
protected void show() { System.out.println("Parent"); }
}
class Child extends Parent {
private void show() { System.out.println("Child"); }
}
public class Main {
public static void main(String[] args) {
new Child().show();
}
}
選択肢
- あなたの回答
- 正解
正解
C. コンパイルエラーになる
詳細解説
オーバーライドではアクセス修飾子を同じか、より広い範囲にしか変更できません。protected を private に変えるのはアクセス権を弱める方向なのでコンパイルエラーになります。
なぜ他の選択肢が違うのか
- アクセス権が弱くなるためコンパイルエラーです。実行されません。
- Child の show() はコンパイルエラーのため実行できません。
- 実行段階に到達しないため実行時エラーにはなりません。
罠ポイント
オーバーライドで許されるのは「同じ」か「より広い」アクセス権への変更です。例えば protected → public は OK です。