問題
次のクラスのサブクラスを正しく宣言しているものはどれですか。
sealed class Base permits Sub{
int id;
}
選択肢
A) final class Sub extends Base { }
B) class Sub extends Base { }
C) abstract class Sub extends Base { }
D) sealed class Sub extends Base { }
E) final class Child extends Base { }
解答
A) final class Sub extends Base { }
B) class Sub extends Base { }
C) abstract class Sub extends Base { }
D) sealed class Sub extends Base { }
E) final class Child extends Base { }
解説
シールクラスを継承するサブクラスは、finalを付与し継承を禁止しなくてはいけません。
また、継承できるサブクラスは、シールクラスで指定されたクラスのみです。
設問では、
sealed class Base permits Sub{ }
と、Subクラスと指定されているため、それ以外のクラスは継承できません。
よって、A) final class Sub extends Base { }が正解です。
A) final class Sub extends Base { }
この選択肢は正しいです。sealed
クラス Base
に対して、permits
で指定された Sub
クラスは final
として宣言されています。これにより、Sub
はサブクラス化できないことを示しています。
他の選択肢について:
B) class Sub extends Base { }
- 理由:
Base
クラスがpermits
でSub
を指定しているため、Sub
は適切に宣言されていますが、permits
に指定されているクラスの正しい宣言としてはfinal
かsealed
でなければなりません。
C) abstract class Sub extends Base { }
- 理由:
Sub
がabstract
である場合、Base
で許可されているクラスとしては正しくありません。サブクラスはfinal
またはnon-sealed
である必要があります。
D) sealed class Sub extends Base { }
- 理由:
Sub
がsealed
である場合、そのサブクラスも指定されなければなりませんが、Base
には他のサブクラスが指定されていないため、正しくありません。
E) final class Child extends Base { }
- 理由:
Child
はBase
のサブクラスとして宣言されていますが、permits
で指定されていないため、正しくありません。Base
のサブクラスはSub
のみとされます。
したがって、正しい選択肢は A です。
対象資格:Java SE17 認定資格