問題
次のクラスのサブクラスの定義として正しいものはどれですか。(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
クラスは他のクラスにサブクラスを制限できます。
C)
abstract class Main extends Base { }
- 正しい。
abstract
クラスはサブクラスを持つことができ、Base
のサブクラスとして適切です。
D)
public class Main extends Base { }
- 正しい。
public
クラスは他のクラスからアクセスでき、正しいサブクラスです。
E)
protected class Main extends Base { }
- 不正確。
protected
クラスは同じパッケージ内またはサブクラスからしかアクセスできず、トップレベルクラスとしては不適切です。
F)
final class Main extends Base { }
- 正しい。
final
クラスはサブクラスを持つことができず、Base
のサブクラスとして適切です。
G)
static class Main extends Base { }
- 不正確。 トップレベルクラスとしては
static
修飾子は使えません。
H)
non-sealed class Main extends Base { }
- 正しい。
non-sealed
クラスは他のクラスがサブクラスを作成できるようにします。
結論
選択肢の中で正しいサブクラスの定義としては B(sealed), C(abstract), D(public), F(final), H(non-sealed) が挙げられますが、B, C, D は特に重要なパターンです。
対象資格:Java SE17 認定資格