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

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

問題

次のコードがコンパイルエラーになる理由として正しいものはどれですか。

abstract class Base {
	private int num;

	Base(int num) {
		this.num = num;
	}

	void method() {
		System.out.println("Base::method");
	}
}

final class Sub extends Base{
	public void method() {
		System.out.println("Sub::method");
	}
}

選択肢

A)Sub クラスには引数なしのコンストラクタを明示的に定義する必要がある

B)Base クラスの変数 num のアクセス修飾子は public を指定する必要がある

C)Sub クラスの直接のスーパークラスは具象クラスである必要がある

D)メソッド method には Base クラスと Sub クラスで同じアクセス修飾子を指定する必要がある

E)Super クラスには引数なしのコンストラクタを明示的に定義す必要がある

解答

A)Sub クラスには引数なしのコンストラクタを明示的に定義する必要がある

B)Base クラスの変数 num のアクセス修飾子は public を指定する必要がある

C)Sub クラスの直接のスーパークラスは具象クラスである必要がある

D)メソッド method には Base クラスと Sub クラスで同じアクセス修飾子を指定する必要がある

E)Super クラスには引数なしのコンストラクタを明示的に定義す必要がある

解説

このコードがコンパイルエラーになる理由について考えてみましょう。

コードの概要

  • Base クラスは abstract で、引数を取るコンストラクタを持っていますが、引数なしのコンストラクタは定義されていません。
  • Sub クラスは Base クラスを継承していますが、引数なしのコンストラクタを明示的に定義していません。

各選択肢の評価

A)Sub クラスには引数なしのコンストラクタを明示的に定義する必要がある

  • 正しい。Base クラスのコンストラクタには引数が必要なので、Sub クラスは super(num) の形で呼び出さなければなりません。引数なしのコンストラクタがないと、コンパイルエラーになります。

B)Base クラスの変数 num のアクセス修飾子は public を指定する必要がある

  • 不正確。private で問題はありません。Base クラスの変数 num にアクセスできないだけで、コンパイルエラーの原因にはなりません。

C)Sub クラスの直接のスーパークラスは具象クラスである必要がある

  • 不正確。SubBase という抽象クラスを継承していますが、特に具象クラスである必要はありません。

D)メソッド method には Base クラスと Sub クラスで同じアクセス修飾子を指定する必要がある

  • 不正確。Sub クラスで method メソッドのアクセス修飾子を変更することは可能です。

E)Super クラスには引数なしのコンストラクタを明示的に定義する必要がある

  • 不正確。Base クラスには引数なしのコンストラクタが必須ではありませんが、Sub クラスが Base クラスを適切に初期化するためには引数が必要です。

結論

したがって、正しい理由は A)Sub クラスには引数なしのコンストラクタを明示的に定義する必要がある です。

前の問題へ SE17_B-03

次の問題へ SE17_B-05

対象資格:Java SE17 認定資格