1Z0-826-JPN 対応
sealed / record / instanceofパターン難易度 標準無料

次のコード(Java 17)の出力として正しいものを選べ。

 1  public class Q7 {
 2      sealed interface Shape permits Circle, Square {}
 3      record Circle(double radius) implements Shape {}
 4      record Square(double side) implements Shape {}
 5
 6      static String describe(Shape s) {
 7          if (s instanceof Circle c && c.radius() > 10) return "big circle";
 8          else if (s instanceof Circle c)  return "small circle";
 9          else if (s instanceof Square sq) return "square " + sq.side();
10          return "unknown";
11      }
12      public static void main(String[] args) {
13          System.out.println(describe(new Circle(5)));
14          System.out.println(describe(new Square(3)));
15      }
16  }
  1. Asmall circle 改行 square 3
  2. Bsmall circle 改行 square 3.0
  3. Cbig circle 改行 square 3.0
  4. Dコンパイルエラー
正解・解説・誤答理由・ひっかけを見る▼ open
✓ 正解:B✓有資格者監修

解説

sealed interface は permits で許可された型だけが実装でき、record は暗黙に final なので sealed の許可対象として適格(コンパイルは通る)。 instanceof Circle c はパターンマッチング for instanceof(SE16以降で標準)で、束縛変数 c がそのブロック内で使える。 Circle(5) は radius=5 で > 10 でないため「small circle」。 Square(3) は record のアクセサ side() が double を返すため 3.0 となり、 文字列連結で "square " + 3.0 = "square 3.0"。
各誤答が違う理由
  • Aside は double 型。3 ではなく 3.0 が連結される。
  • Cradius=5 は > 10 を満たさないので「big circle」にならず「small circle」。
  • Dsealed+record+instanceofパターンはいずれもJava 17で標準。正しく書かれており、コンパイルは通る。
ひっかけ: double リテラルは整数値でも 3.0 と表示される(プリミティブ型の連結)。recordアクセサは field() 形式(field ではない)。
実機確認の答え合わせ
出力:
small circle
square 3.0
✓有資格者(著者)による書き下ろし解説

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

この問題集の作り方

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