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

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

問題

次のコードをコンパイル、実行するとどうなりますか。

public class Main {
	public static void main(String... args) {
		Object[] objects = { new Base(), new Sub(), "Other: " };
		for (Object obj : objects) {
			if (obj instanceof Base o)
				o.method();
		}
	}
}

class Base {
	public void method() {
		System.out.print("Base: ");
	}
}

class Sub extends Base {
	private void print() {
		System.out.print("Sub: ");
	}

	public void method() {
		print();
	}
}

選択肢

A)何も出力されない

B)コンパイルエラーになる

C)Other: が出力される

D)Sub: が出力される

E)Base: Sub: Other: が出力される

F)ClassCastException がスローされる

G)Base: Sub: が出力される

解答

A)何も出力されない

B)コンパイルエラーになる

C)Other: が出力される

D)Sub: が出力される

E)Base: Sub: Other: が出力される

F)ClassCastException がスローされる

G)Base: Sub: が出力される

解説

コードの解析

1. ブジェクト配列の定義
Object[] objects = { new Base(), new Sub(), "Other: " };

Base クラスのインスタンス、Sub クラスのインスタンス、文字列 "Other: " の3つのオブジェクトを含む配列が作成されます。

2. for-eachループ
for (Object obj : objects) {
    if (obj instanceof Base o)
        o.method();
}

各オブジェクトに対して instanceof 演算子を使い、Base クラスまたはそのサブクラスのインスタンスかどうかを確認します。

3. オブジェクトのタイプとメソッドの呼び出し

1つ目のオブジェクト (new Base()):

  • instanceof によって Base のインスタンスと判断され、o.method() が呼ばれます。
  • method() が呼ばれ、"Base: " と出力されます。

2つ目のオブジェクト (new Sub()):

  • 同様に instanceof によって Base のインスタンスと判断され、o.method() が呼ばれます。
  • Sub クラスの method() が呼ばれ、print() メソッドが呼ばれて "Sub: " と出力されます。

3つ目のオブジェクト ("Other: "):

  • instanceof によって Base のインスタンスではないため、何も出力されません

前の問題へ SE17_B-57

次の問題へ SE17_B-59

対象資格:Java SE17 認定資格