【Java SE17 Silver 模擬試験】B-02

Java SE17 Silver 模擬試験
Java SE17 Silver 模擬試験

問題

次のコードについて正しい説明はどれですか。

A.java

package p1;

public class A {
	int a;

	public A() {
		this(0);
	}

	A(int a) {
		this.a = a;
	}

	protected void methodA() {
		System.out.println("A::methodA");
	}
}

B.java

package p2;

import p1.A;

public class B {
	private static B b = new B();
	private A a;

	private B() {
		a = new A();
	}

	public static B getInstance() {
		return b;
	}

	public void callA() {
		a.methodA();
	}
}

Main.java

import p2.B;

public class Main {
	public static void main(String... args) {
		B b = B.getInstance();
		b.callA();
	}
}

選択肢

A)Bクラスでは、a.aと記述するとAクラスのインスタンス変数aにアクセスできる

B)Aクラスのメソッド methodA のアクセス修飾子は public である必要がある

C)Bクラスのコンストラクタのアクセス修飾子は public である必要がある

D)Aクラスのすべてのコンストラクタのアクセス修飾子はpublic である必要がある

E)コードはコンパイルされ、A::methodA が出力される

解答

A)Bクラスでは、a.aと記述するとAクラスのインスタンス変数aにアクセスできる

B)Aクラスのメソッド methodA のアクセス修飾子は public である必要がある

C)Bクラスのコンストラクタのアクセス修飾子は public である必要がある

D)Aクラスのすべてのコンストラクタのアクセス修飾子はpublic である必要がある

E)コードはコンパイルされ、A::methodA が出力される

解説

次のコードについて正しい説明を考えてみましょう。

コードの確認

  1. A.java
    • A クラスはパッケージ p1 にあり、int a を持つ。
    • デフォルトコンストラクタと int を引数に取るコンストラクタが定義されている。
    • methodAprotected 修飾子が付いている。
  2. B.java
    • B クラスはパッケージ p2 にあり、A クラスのインスタンス a を持つ。
    • プライベートなコンストラクタを持ち、インスタンスを初期化する。
  3. Main.java
    • B クラスのインスタンスを取得し、callA メソッドを呼び出す。

各選択肢の評価

A)Bクラスでは、a.aと記述するとAクラスのインスタンス変数aにアクセスできる。

  • 誤り: aprivate であり、直接アクセスすることはできない。

B)Aクラスのメソッド methodA のアクセス修飾子は public である必要がある。

  • 誤り: methodAprotected で定義されており、サブクラスや同じパッケージのクラスからアクセス可能です。

C)Bクラスのコンストラクタのアクセス修飾子は public である必要がある。

  • 誤り: B クラスのコンストラクタは private で問題ない。シングルトンパターンの実装です。

D)Aクラスのすべてのコンストラクタのアクセス修飾子は public である必要がある。

  • 誤り: デフォルトコンストラクタはデフォルトアクセス修飾子で問題ありません。

E)コードはコンパイルされ、A::methodA が出力される。

  • 正しい: コードはコンパイルされ、B.getInstance() を呼び出すことで A のインスタンスが作成され、callA メソッドにより methodA が呼び出されて A::methodA が出力されます。

結論

正しい説明は E のみです。

前の問題へ SE17_B-01

次の問題へ SE17_B-03

対象資格:Java SE17 認定資格