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

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

問題

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

public class Main {
	public static void main(String[] args) {
		A[] list = new A[3];
		list[0] = new A();
		list[1] = new B();
		list[2] = new C();
		for(A obj : list) {
			obj.print();
		}
	}
}

class A {
	public void print() {
		System.out.print("A");
	}
}

class B extends A {
	public void print() {
		System.out.print("B");
	}
}

class C extends A {
	public void print() {
		System.out.print("C");
	}
}

選択肢

A)Aが出力されたあと、ClassCastException がスローされる

B)何も出力されず、ClassCastException がスローされる

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

D)ABC が出力されたあと、ArrayIndexOutOfBoundsException がスローされる

E)ABC が出力される

F)AAA が出力される

解答

A)Aが出力されたあと、ClassCastException がスローされる

B)何も出力されず、ClassCastException がスローされる

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

D)ABC が出力されたあと、ArrayIndexOutOfBoundsException がスローされる

E)ABC が出力される

F)AAA が出力される

解答

このコードをコンパイル、実行すると、E)ABC が出力される という結果になります。

  1. 配列の作成:javaコードをコピーするA[] list = new A[3]; A クラスのインスタンスを格納できる配列 list を作成します。
  2. オブジェクトの格納:javaコードをコピーするlist[0] = new A(); // Aのインスタンス list[1] = new B(); // Bのインスタンス(Aを継承) list[2] = new C(); // Cのインスタンス(Aを継承)
    • list[0] には A のインスタンスが格納されます。
    • list[1] には B のインスタンスが格納されます。
    • list[2] には C のインスタンスが格納されます。
  3. ループ処理:javaコードをコピーするfor(A obj : list) { obj.print(); } このループは list の各要素に対して print() メソッドを呼び出します。ここでの重要な点は、print() メソッドがオーバーライドされているため、実行時に実際のオブジェクトの型に応じたメソッドが呼ばれます。
    • list[0] の場合、Aprint() メソッドが呼び出され、"A" が出力されます。
    • list[1] の場合、Bprint() メソッドが呼び出され、"B" が出力されます。
    • list[2] の場合、Cprint() メソッドが呼び出され、"C" が出力されます。

結論

最終的に出力されるのは ABC ですので、正しい選択肢は E)ABC が出力される です。

前の問題へ SE17_A-26

次の問題へ SE17_A-28


対象資格:Java SE17 認定資格