目录
一、设计动机:精确控制继承关系
-
传统继承问题:
- 开放继承导致类层次结构混乱,难以维护。
- 框架开发者无法限制第三方扩展其核心接口。
-
密封机制的优势:
- 明确允许哪些类 / 接口可以继承或实现当前类型。
- 增强类型系统的安全性,支持模式匹配的完整性检查。
二、核心语法与特性
-
密封接口(Sealed Interface):
public sealed interface Shape permits Circle, Rectangle, Triangle { double area(); } public final class Circle implements Shape { private final double radius; // 实现略 } public non-sealed class Rectangle implements Shape { // 允许进一步继承 }
-
密封枚举(Sealed Enum):
public sealed enum Color permits PrimaryColor, SecondaryColor { RED, GREEN, BLUE; } public non-sealed enum PrimaryColor extends Color { YELLOW, CYAN, MAGENTA; }
三、与模式匹配的协同
密封类型与模式匹配结合,实现 完整覆盖检查:
public double calculateArea(Shape shape) {
return switch (shape) {
case Circle c -> Math.PI * c.radius() * c.radius();
case Rectangle r -> r.width() * r.height();
case Triangle t -> t.base() * t.height() / 2;
// 编译器确保所有可能的子类都被覆盖
};
}