AI作成・AIで再検証済(有資格者監修なし)1Z0-826-JPN 対応
sealed(許可サブクラスの修飾子)難易度 高無料

次のコード(Java 17)のコンパイル結果として正しいものを選べ(全て同一ファイル・同一パッケージとする)。

1  sealed class Shape permits Circle, Square {}
2  final class Circle extends Shape {}
3  class Square extends Shape {}
  1. Aコンパイルエラー(Square が final/sealed/non-sealed のいずれでもない)
  2. Bコンパイル成功。permits に列挙されていればサブクラス側の修飾子は不要。
  3. Cコンパイルエラー(許可サブクラスはすべて final でなければならない)
  4. Dコンパイルエラー(permits は別ファイルの型を指定できない)
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:AAI作成・AIで再検証済

解説

sealed クラス/インタフェースの直接のサブクラス(permits で許可された型)は、必ず次の3修飾子のいずれかで宣言しなければならない(JLS §8.1.1.2)。

  • final … それ以上継承させない(=封印を閉じる)
  • sealed … さらに permits で継承を限定する(封印を続ける)
  • non-sealed … 明示的に封印を解除し誰でも継承可にする

2行目 Circle は final なので適格。しかし3行目 Square はどの修飾子も付いていないため、 「封印を閉じるのか・続けるのか・解くのか」が不定になりコンパイルエラーになる。 Square を final/sealed/non-sealed のいずれかにすれば通る。

各誤答が違う理由
  • Bpermits は「誰が継承してよいか」を決めるだけ。許可された各サブクラスは final/sealed/non-sealed のいずれかを必ず宣言する義務がある。
  • Cfinal は3つの選択肢の1つに過ぎない。sealed や non-sealed でも適格なので「全て final」は誤り。
  • D本問は全て同一ファイル。エラーの原因は Square の修飾子欠落であって permits の記述場所ではない。
ひっかけ: record は暗黙に final なので sealed の許可対象にそのまま置けるが、通常の class は自動で final にならない。「permits に書けば継承の可否は解決済み」と誤解し、サブクラス側の修飾子を付け忘れるのが典型。
実機確認の答え合わせ
javac でコンパイル:
Shape.java:3: error: sealed, non-sealed, or final modifiers expected
class Square extends Shape {}
^
→ コンパイル不成立(実行に至らない)。
AIが作成し、別の手順のAIで誤りを点検した解説です(有資格者による監修は経ていません)

有資格者(著者)が監修した問題は、すべて無料サンプルとして公開しています。買う前に、その全部を実際に解いて解説まで読めます。有料で追加される問題はAIが作成したもので、有資格者の監修は入っていません。

この問題集の作り方

  1. 問題と解説はAIが作成しています。有資格者(著者)が監修した問題は、無料サンプルとして公開している分だけです。有料で追加される問題に監修は入っていません。
  2. 各問に、公式ドキュメントの出典リンクを付けています。書いてあることは、出典に当たって確かめられます。
  3. 誤答の選択肢それぞれに、なぜ誤りなのかの理由を書いています。
  4. 解説に載せているコンパイル結果は、実際に javac を走らせた出力です。想定した挙動ではありません。
  5. 誤りを見つけたら報告できます。原則として無償で訂正・削除します。
  6. 各試験の運営団体とは無関係の非公式教材です。合格を保証するものではありません。
この分野をもっと解いて、得点源に
record / sealed を含む問題を分野別に演習できます。
演習する →