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

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

問題

次のコードでコンパイルエラーになる箇所は(1)から(9)のどれですか。(3つ選択)

 public class Main {
	 public static void main(String... args) {
		Base b = new MyClass();
	 MyType t = new MyClass();
  	 b.print("one");                                     //(1)
		(MyType)b.print("two");             //(2)
		((MyType)b).print("three");       //(3)
 	 t.print("four");                                     //(4)
		(MyType)t.print("five");              //(5)
	        ((MyType)t).print("six");            //(6)
	 }
 }

sealed interface MyType permits MyClass {           //(7)
	 void print(String s);
 }

class Base {                                                                //(8)
	 public static final String DELIMITER = ",";
}

final class MyClass extends Base implements MyType {    //(9)
 	 public void print(String s) {
		System.out.print(s + Base.DELIMITER);
	 }
}

選択肢

A)(1)

B)(2)

C)(3)

D)(4)

E)(5)

F)(6)

G)(7)

H)(8)

I)(9)

解答

A)(1)

B)(2)

C)(3)

D)(4)

E)(5)

F)(6)

G)(7)

H)(8)

I)(9)

解説

コンパイルエラーになる箇所

  1. (1) b.print("one");
    • 理由: Base クラスには print メソッドが定義されていません。したがって、この呼び出しはコンパイルエラーになります。
  2. (2) (MyType)b.print("two");
    • 理由: (MyType)bBase 型のオブジェクトであり、Base クラスに print メソッドは存在しません。したがって、b.print("two") の結果を MyType にキャストすることはできず、これもコンパイルエラーになります。
  3. (3) ((MyType)b).print("three");
    • 理由: 同様に、(MyType)bBase 型のオブジェクトで、Base には print メソッドがありません。したがって、この行もコンパイルエラーになります。
  4. (4) t.print("four");
    • 理由: tMyType インターフェースのインスタンスで、print メソッドが正しく実装されているため、これは正常にコンパイルされます。
  5. (5) (MyType)t.print("five");
    • 理由: t.print("five")void メソッドであるため、戻り値を持ちません。このため、(MyType)t.print("five"); はコンパイルエラーになります。
  6. (6) ((MyType)t).print("six");
    • 理由: これは正常です。tMyType 型なので、print メソッドを正しく呼び出すことができます。

正しい選択肢

コンパイルエラーになる箇所は以下の3つです。

  • (1) b.print("one");
  • (2) (MyType)b.print("two");
  • (5) (MyType)t.print("five");

したがって、正しい選択肢は A(1)、B(2)、E(5) です。

前の問題へ SE17_B-32

次の問題へ SE17_B-34

対象資格:Java SE17 認定資格