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

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 メソッドのみである

解説

A)MyCalculatorImpl クラスはabstract クラスとして定義しなければならない
→ 誤りです。MyCalculator はインターフェースであり、default メソッドを持っているため、MyCalculatorImpl クラスはインターフェースのメソッドを実装する義務がなく、そのまま具象クラスとして定義できます。abstract とする必要はありません。

B)MyCalculator インターフェースの default メソッドは MyCalculatorImpl クラスでオーバーライドしなければならない
→ 誤りです。default メソッドはインターフェースで提供されているデフォルトの実装なので、オーバーライドする必要はありません。

C)Main クラスの nums は int 型の配列であるため MyCalculator インターフェースのメソッドを呼び出すことはできない
→ 誤りです。int[] は可変長引数 (int...) に渡すことができます。したがって、問題なくメソッドを呼び出すことができます。

D)MyCalculator インタフェースのprivate メソッドは MyCalculatorimpl クラスから呼び出すことができる
→ 誤りです。private メソッドはそのインターフェース内からしか呼び出せません。実装クラス (MyCalculatorImpl) から直接呼び出すことはできません。

E)MyCalculator インタフェースでは abstract メソッドを定義しなければならない
→ 誤りです。Java 8以降、インターフェースには default メソッドを定義できるので、abstract メソッドが必須ではありません。

F)MyCalculator インタフェースの private メソッドを呼び出すことができるのは MyCalculator インタフェースの default メソッドのみである
→ 正しいです。private メソッドは同じインターフェース内で定義された default メソッドや他の private メソッドからのみ呼び出すことができます。

前の問題へ SE17_A-15

次の問題へ SE17_A-17


対象資格:Java SE17 認定資格