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

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

問題

次のコードについて正しい説明はどれですか。

public class Main {
	public static void main(String... args) {
		MyCalculator calc = new MyCalculatorImpl();
		int[] nums = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
		System.out.println(calc.addEven(nums));
		System.out.println(calc.addOdd(nums));
	}
}

class MyCalculatorImpl implements MyCalculator {

}

interface MyCalculator {
	default int addEven(int... nums) {
		int total = 0;
		for (int i = 0; i < nums.length; i++) {
			if (nums[i] % 2 == 0)
				total = add(total, nums[i]);
		}
		return total;
	}

	default int addOdd(int... nums) {
		int total = 0;
		for (int i = 0; i < nums.length; i++) {
			if (nums[i] % 2 != 0)
				total = add(total, nums[i]);
		}
		return total;
	}

	private int add(int a, int b) {
		return a + b;
	}
}

選択肢

A)MyCalculatorImpl クラスはabstract クラスとして定義しなければならない

B)MyCalculator インターフェースのdefault メソッドは MyCalculatorImpl クラスでオーバーライドしなければならない

C)Main クラスの nums は int 型の配列であるため MyCalculator インターフェースのメソッドを呼び出すことはできない

D)MyCalculator インタフェースのprivate メソッドは MyCalculatorimpl クラスから呼び出すことができる

E)MyCalculator インタフェースでは abstract メソッドを定義しなければならない

F)MyCalculator インタフェースの private メソッドを呼び出すことができるのは MyCalculator インタフェースの default メソッドのみである

解答

A)MyCalculatorImpl クラスはabstract クラスとして定義しなければならない

B)MyCalculator インターフェースのdefault メソッドは MyCalculatorImpl クラスでオーバーライドしなければならない

C)Main クラスの nums は int 型の配列であるため MyCalculator インターフェースのメソッドを呼び出すことはできない

D)MyCalculator インタフェースのprivate メソッドは MyCalculatorimpl クラスから呼び出すことができる

E)MyCalculator インタフェースでは abstract メソッドを定義しなければならない

F)MyCalculator インタフェースの private メソッドを呼び出すことができるのは MyCalculator インタフェースの default メソッドのみである

解説

  1. A)MyCalculatorImpl クラスはabstract クラスとして定義しなければならない
    • 誤りです。MyCalculatorImplMyCalculator インターフェースを実装していますが、インターフェースのメソッドをオーバーライドしなくても具体的なクラスとして定義できます。
  2. B)MyCalculator インターフェースのdefault メソッドは MyCalculatorImpl クラスでオーバーライドしなければならない
    • 誤りです。default メソッドはオーバーライドが必須ではありません。MyCalculatorImpl でオーバーライドしなくても、デフォルトの実装が利用されます。
  3. C)Main クラスの nums は int 型の配列であるため MyCalculator インターフェースのメソッドを呼び出すことはできない
    • 誤りです。numsint 型の配列ですが、int... nums という可変長引数として受け取ることができるので、問題なくメソッドを呼び出せます。
  4. D)MyCalculator インタフェースのprivate メソッドは MyCalculatorImpl クラスから呼び出すことができる
    • 誤りです。private メソッドは定義されているクラスの内部からのみ呼び出すことができるため、MyCalculatorImpl からは直接呼び出せません。
  5. E)MyCalculator インタフェースでは abstract メソッドを定義しなければならない
    • 誤りです。インターフェースには default メソッドや private メソッドのみを含むこともできるため、abstract メソッドを定義する必要はありません。
  6. F)MyCalculator インタフェースの private メソッドを呼び出すことができるのは MyCalculator インタフェースの default メソッドのみである
    • 正しいです。private メソッドは同じインターフェース内の default メソッドからのみ呼び出すことができます。

前の問題へ SE17_B-28

次の問題へ SE17_B-30

対象資格:Java SE17 認定資格