
問題
次のクラスのサブクラスの定義として正しいものはどれですか。(3つ選択)
public class Base {
}
選択肢
A)
private class Main extends Base { }
B)
sealed class Main extends Base { }
C)
abstract class Main extends Base { }
D)
public class Main extends Base { }
E)
protected class Main extends Base { }
F)
final class Main extends Base { }
G)
static class Main extends Base { }
H)
non-sealed class Main extends Base { }
解答
A)
private class Main extends Base { }
B)
sealed class Main extends Base { }
C)
abstract class Main extends Base { }
D)
public class Main extends Base { }
E)
protected class Main extends Base { }
F)
final class Main extends Base { }
G)
static class Main extends Base { }
H)
non-sealed class Main extends Base { }
解説
Base
クラスは、デフォルトのアクセス修飾子で宣言されています。これにより、同じパッケージ内のクラスからはアクセスできますが、他のパッケージからはアクセスできません。
各選択肢の評価
- A) private class Main extends Base { }
private
修飾子を持つクラスは、そのクラスが定義されているコンテキスト(例えば、内部クラスとしての位置)からしかアクセスできません。トップレベルのクラスとしては不適切です。
- B) sealed class Main extends Base { }
sealed
修飾子は、このクラスを継承できるクラスを制限しますが、Base
クラス自体がsealed
でないため、この宣言は不適切です。
- C) abstract class Main extends Base { }
abstract
修飾子を持つクラスは、他のクラスによって継承されることができます。インスタンス化できませんが、サブクラスとしては正しい選択肢です。
- D) public class Main extends Base { }
public
アクセス修飾子を持つこのクラスは、他のクラスからアクセス可能であり、一般的なサブクラスの定義として正しいです。
- E) protected class Main extends Base { }
protected
修飾子は、同じパッケージ内のクラスとサブクラスからアクセス可能ですが、トップレベルのクラスとしては不適切です。
- F) final class Main extends Base { }
final
修飾子を持つクラスは、他のクラスに継承されることはありませんが、サブクラスとして定義するのには問題ありません。
- G) static class Main extends Base { }
static
修飾子は、トップレベルのクラスには適用できません。この選択肢は不適切です。
- H) non-sealed class Main extends Base { }
non-sealed
修飾子は、sealed
クラスのサブクラスでのみ使用するものであり、Base
がsealed
でないため不適切です。
正しい選択肢
- C:
abstract class Main extends Base { }
— サブクラスとして正しい。 - D:
public class Main extends Base { }
— サブクラスとして正しい。 - F:
final class Main extends Base { }
— サブクラスとして正しい。
これらの理由から、正しい選択肢は C、D、F です。
対象資格:Java SE17 認定資格