Java17の紫本の模擬試験にて以下のような問題があります。
正解はACEHだそうなのですが、解説を見ても何故なのか全く分かりません。これは誤植?なのでしょうか?それとも自分の認識が間違っているのでしょうか
ちなみに解説を見ると「トップレベルのクラスに指定できるアクセス修飾子はpublicか省略の形であり、選択肢Aは適切な宣言です。」と書かれています。
解説について昨日は省略していましたが、全文は以下です。
「クラスに指定できる修飾子についての問題です。
トップレベルのクラスに指定できるアクセス修飾子はpublicか省略の形であり、選択肢Aは適切な宣言です。
またprivateやstaticはトップレベルのクラスには指定できない為、選択肢B、Dは間違いです。
選択肢C、Eについてサブクラスによる継承を禁止するクラスにはfinal、抽象クラスにはabstractを指定する為どちらもクラスに指定可能な修飾子です。
ただし、選択肢Fのようにabstractとfinalを両方指定することはできません。
2行目ではシールクラスを宣言しています。permitsによる継承先の限定はありませんが、同一ファイル内でサブクラスを宣言する場合は、シールクラスの継承が必要です。サブクラスにはnon-sealed、sealed、finalのいずれかを指定するため、選択肢Hは正しい記述です。
選択肢Gはシールクラスを宣言していますが、継承を禁止とするfinalが指定されているため間違いです。」
問題
次のプログラムがあります。
java
1sealed class Base {} 2//insert code here
2行目に記述できるクラス宣言として正しいものはどれですか。(4つ選択)
A. public class Derived{}
B. private class Derived{}
C. final class Derived{}
D. static class Derived extends Base{}
E. abstract class Derived{}
F. abstract final class Derived{}
G. sealed final class Derived{}
H. non-sealed class Derived extends Base{}
3/25 補足
-
選択肢Hについて誤記がありましたので修正しました。
-
Base.javaというのファイル名について、問題中ではjavaファイル名が明言されておらず、この本を買ったらダウンロードできるサンプルプログラムからファイル名からとっています。
-
解説を全文載せました。
-
正解とされる選択肢も実際に試行しましたが以下のようになりました。(java version "17.0.16" 2025-07-15 LTS)
-
A
Base.javaだった場合:Derivedクラスがpublicであるため、ファイル名がおかしい(コンパイルエラー)、Baseクラスを継承しているクラスが一つもない(コンパイルエラー)
Derived.javaだった場合:Baseクラスを継承しているクラスが一つもない(コンパイルエラー) -
C
Base.javaだった場合:Baseクラスを継承しているクラスが一つもない(コンパイルエラー)
Derived.javaだった場合:Baseクラスを継承しているクラスが一つもない(コンパイルエラー) -
E
Base.javaだった場合:Baseクラスを継承しているクラスが一つもない(コンパイルエラー)
Derived.javaだった場合:Baseクラスを継承しているクラスが一つもない(コンパイルエラー) -
H
Base.javaだった場合:コンパイル成功
Derived.javaだった場合:コンパイル成功
アドバイス通り、お問い合わせフォームに送ってみます。
回答された方ありがとうございました。
回答3件
あなたの回答
tips
プレビュー