Java 密封类
理解密封类的概念,控制类的继承层次,提高代码安全性与可维护性。 · 难度:入门 · +15XP
密封类概述
Java 17 正式引入密封类(Sealed Classes),允许你指定哪些类或接口可以继承或实现它,从而精确控制类型层次。
基本语法
public sealed class Shape permits Circle, Rectangle, Triangle { }
final class Circle extends Shape { }
non-sealed class Rectangle extends Shape { }
sealed class Triangle extends Shape permits EquilateralTriangle { }
修饰符说明
| 修饰符 | 含义 |
|---|---|
| sealed | 声明为密封类 |
| permits | 指定允许的子类 |
| final | 子类不可再被继承 |
| non-sealed | 子类可被任意继承 |
| sealed | 子类也是密封的 |
使用场景
- 领域模型中的有限类型(如形状、支付方式)
- 状态机中的状态枚举
- 编译时确保模式匹配的穷尽性
与模式匹配结合
double area = switch (shape) {
case Circle c -> Math.PI * c.radius() * c.radius();
case Rectangle r -> r.width() * r.height();
case Triangle t -> 0.5 * t.base() * t.height();
};练习提示:定义一个密封接口 PaymentMethod,包含信用卡、PayPal 和银行转账三种实现。