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

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

問題

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

public class Main {
	public static void main(String... args) {
		Hello hello = new HelloImp1();
		hello.greeting();
	}
}

interface Hello {
	default void greeting() { System.out.println("Hello World");}
}

abstract class AbstractHello {
	private void greeting() { System.out.println("Abstract Hello World");}
}

class HelloImp1 extends  AbstractHello implements Hello {}

選択肢

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

B)Hello World が出力される

C)Abstract Hello World が出力される

D)ClassCastException がスローされる

E)何も出力されない

解答

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

B)Hello World が出力される

C)Abstract Hello World が出力される

D)ClassCastException がスローされる

E)何も出力されない

解説

以下の順にコード処理が行われます。

public class Main {
	public static void main(String... args) {
		Hello hello = new HelloImp1();           //1
		hello.greeting();      //2
	}
}

interface Hello {
	default void greeting() { System.out.println("Hello World");}     //3. Hello Worldが出力
}

abstract class AbstractHello {
	private void greeting() { System.out.println("Abstract Hello World");}
}

class HelloImp1 extends  AbstractHello implements Hello {}

なお、AbstractHelloクラスのgreeting()メソッドのアクセス修飾子はprivateのため、AbstractHelloクラス内でしか利用できません。
HelloImp1 クラスは Hello インターフェースを実装しており、デフォルトメソッド greeting() を持っています。

AbstractHello クラスには privategreeting() メソッドがありますが、private メソッドはそのクラスの外部からはアクセスできません。このため、HelloImp1 クラスからはこの greeting() メソッドは見えず、使用されることはありません。

Main クラスの main メソッドでは HelloImp1 のインスタンスを作成し、その greeting() メソッドを呼び出しています。この場合、Hello インターフェースのデフォルトメソッドが呼び出されるため、出力は Hello World になります。
そのため、Hello Worldが出力されます。

A)コンパイルエラーになる
→ 誤り。コードは正しくコンパイルされます。すべてのクラスとインターフェースが正しく実装されています。

B)Hello World が出力される
→ 正しい。Hello インターフェースのデフォルトメソッドが呼び出されるため、出力は Hello World になります。

C)Abstract Hello World が出力される
→ 誤り。AbstractHello クラスの greeting() メソッドは private であり、HelloImp1 からはアクセスできないため、出力されることはありません。

D)ClassCastException がスローされる
→ 誤り。HelloImp1 のインスタンスは Hello として扱われますが、キャストに関するエラーは発生しません。

E)何も出力されない
→ 誤り。hello.greeting() が呼び出されているため、出力が行われます。

前の問題へ SE17_A-08

次の問題へ SE17_A-10


対象資格:Java SE17 認定資格