【Java SE17 Silver 模擬試験】A-23

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.print("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() {
		retrun 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)A クラスのメソッド methodAのアクセス修飾子は public である必要がある

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

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

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

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

解答

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

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

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

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

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

解説

AクラスとBクラスは継承関係になく、また別のパッケージに所属しています。
MainクラスでB型のインスタンス化を行い、その後b.callA();により、呼び出しています。
BクラスのcallA()メソッドでは、a.methodA()を呼び出していますが、AクラスのmethodA()のアクセス修飾子はprotectedのため、アクセスできず、コンパイルエラーが発生します。
このコンパイルエラーを解消するには、methodA()のアクセス修飾子をprotectedからpublicに変更する必要があります。

A)A クラスのメソッド methodA のアクセス修飾子は public である必要がある
  • A クラスの methodA()protected です。しかし、B クラスは p2 パッケージにあり、A クラスは p1 パッケージにあるため、異なるパッケージ間で protected メソッドにはアクセスできません。これを解決するには、methodA() のアクセス修飾子を public に変更する必要があります。
  • 正しい選択肢です。
B)コードはコンパイルされ、A : : methodA が出力される
  • これは誤りです。先述の通り、protected メソッド methodA()p2 パッケージのクラス B からはアクセスできません。そのため、このコードはコンパイルエラーになります。
C)B クラスでは、a.a と記述すると A クラスのインスタンス変数 a にアクセスできる
  • A クラスのインスタンス変数 a はデフォルト(パッケージプライベート)アクセス修飾子が付いています。異なるパッケージのクラスから直接アクセスすることはできません。したがって、B クラスで a.a と書くとコンパイルエラーになります。
  • 誤りです。
D)B クラスのコンストラクタのアクセス修飾子は public である必要がある
  • B クラスのコンストラクタは private であり、これはシングルトンパターンを実装しているためです。コンストラクタが private であっても問題はありません。クラス外から new B() としてインスタンス化することはできませんが、getInstance() メソッドが B のインスタンスを返すので、問題なく利用できます。
  • 誤りです。
E)A クラスのすべてのコンストラクタのアクセス修飾子は public である必要がある
  • A クラスのコンストラクタの1つはデフォルト(パッケージプライベート)であり、もう1つは public です。異なるパッケージでインスタンスを作成するために、public コンストラクタさえあれば問題ありません。
  • 誤りです。

結論

正しい選択肢は A)A クラスのメソッド methodA のアクセス修飾子は public である必要がある です。

前の問題へ SE17_A-22

次の問題へ SE17_A-24


対象資格:Java SE17 認定資格