本日はアクセス修飾子についての問題を解いてみましょう。
問題
次のプログラムを実行した場合の出力はどれでしょうか?正しい選択肢を選んでください。
class Parent {
public int value = 10;
protected int protectedValue = 20;
private int privateValue = 30;
}
class Child extends Parent {
void displayValues() {
System.out.println("Public: " + value);
System.out.println("Protected: " + protectedValue);
// System.out.println("Private: " + privateValue); // エラー
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.displayValues();
}
}
選択肢
- A. Public: 10, Protected: 20, Private: 30
- B. Public: 10, Protected: 20
- C. コンパイルエラーが発生する
- D. 実行時エラーが発生する
答えと解説
回答を見る
答え
B. Public: 10, Protected: 20
解説
Javaのアクセス修飾子は、宣言されたフィールドやメソッドが他のクラスからどのように見えるかを制御します。
- 基本説明
Javaには主に4つのアクセス修飾子があります:public, protected, なし(パッケージプライベート)、そして private。
publicはどこからでもアクセス可能です。
protectedは同一パッケージ内、または継承したクラスで使用できます。
privateはそのクラス内でしか使用できません。
- 誤答理由
選択肢Aはprivate変数にアクセスできるとしているため誤りです。private修飾子により、privateValue
はChild
クラスではアクセスできません。
選択肢Cはコンパイルエラーがあるとしていますが、適切にコメントアウトされているため誤りです。
選択肢Dは実行時エラーがあるとしていますが、プログラムで実行時エラーが発生する理由はありません。
- つまずきポイント
アサーションされる可能性があるのは、Javaにおいてprivateメンバーのアクセス資格権です。
プライベートフィールドにアクセスする試みは、特に質問文中でのコメントアウトに気付かないと誤答に繋がります。
- 発展知識
アクセス修飾子はクラスの設計に深く関わっています。特に、クラス間の協力やアクセスパターンの制御に用いられます。
異なるモジュールやライブラリでの利用を制限する際にも便利です。
効果的に使うことで、安全でメンテナンス容易なコードを確保する手段となります。また、インタフェースとクラスの関係でのアクセス制御にも注意が必要です。