record で sealed インタフェースを実装
出力はどれか。
public class Main {
public static void main(String[] args) {
Shape s = new Circle(2);
System.out.println(s.area());
}
}
sealed interface Shape permits Circle, Rect {
double area();
}
record Circle(double r) implements Shape {
public double area() { return 3 * r * r; }
}
record Rect(double w, double h) implements Shape {
public double area() { return w * h; }
}
- A
12.0 - B
12 - C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: area() は 3 * 2.0 * 2.0 = 12.0 (double) です。double を出力すると 12.0 と表示されます。
- B: r は double なので計算結果も double で、12.0 と表示されます。
- C: レコードはインタフェースを実装でき、暗黙に final なので sealed の子として認められます。
- D: 例外になる処理はありません。
ポイント
- record は暗黙的に final なので、修飾子を付けずに sealed インタフェースの許可されたサブクラスにできます。