今回はアクセス修飾子に関する問題を解いていきましょう。
問題
以下のJavaプログラムを実行した場合に現れる出力を選択してください。
public class AccessTest {
private int a = 10;
protected int b = 20;
int c = 30;
public int d = 40;
public void displayValues() {
System.out.println("a: " + a);
System.out.println("b: " + b);
System.out.println("c: " + c);
System.out.println("d: " + d);
}
public static void main(String[] args) {
AccessTest test = new AccessTest();
test.displayValues();
}
}
選択肢
- A. a: 10, b: 20, c: 30, d: 40
- B. a: 0, b: 0, c: 0, d: 0
- C. a: undefined, b: undefined, c: undefined, d: undefined
- D. プログラムは例外をスローして終了する
答えと解説
回答を見る
答え
A. a: 10, b: 20, c: 30, d: 40
解説
基本説明:
このプログラムはJavaの異なるアクセス修飾子の動作を示しています。アクセス修飾子には`private`、`protected`、(デフォルト/パッケージレベル)、および`public`があります。
`private`は同じクラス内でのみアクセス可能であり、つまりこの変数は`AccessTest`クラスの外部からはアクセスできません。`protected`は同じパッケージまたはサブクラスでのアクセスが可能です。デフォルトのアクセス修飾子(記述なし)は、同じパッケージ内でのアクセスを許可します。最後に`public`はどこからでもアクセス可能です。
誤答理由:
選択肢Bは、変数が初期化されていない場合の出力、選択肢Cは変数がどの可視範囲(スコープ)にも存在しない場合の出力を示唆しています。選択肢Dは、例外が発生する可能性を示唆していますが、実際は例外は発生しません。
つまずきポイント:
アクセス修飾子による可視性の違いは、一般的に初心者にとって紛らわしいポイントです。特にデフォルトのアクセス修飾子が何も書かれていないことで見落とされがちです。
発展知識:
プログラム設計においてアクセス修飾子を適切に使うことは、情報隠蔽(隠すべきデータやメソッドを制御する)を実現します。コードが大規模の場合、これは特に重要です。適切な修飾子を使用することで、コードのメンテナンス性と再利用性が向上します。