跳转到主内容
极星编程网:以代码为星,赴技术山海!

Java 密封类(sealed class Java 15 preview → 17 正式)的定义语法

Java密封类自17版正式支持,用sealed关键字声明并配合permits限定直接子类,子类须为final/sealed/non-sealed之一,接口同样适用该机制。 Java 密封类(sealed class)用于限制哪些类可以继承它,从 Java 15 作为预览特性引入,到 Java 17 成为正式特性。它的核心语法是通过 sealed 关键字声明类,并用 permits 明确列出允许的直接子类。 基本定义语法 密封类必须满足三个条件:显式声明为 sealed 、指定 permits 子类列表、每个被允许的直接子类必须用 final 、 sealed 或 non-sealed 之一明确标注其继承权限。 父类声明格式: sealed class A permits B, C, D 子类 B/C/D 必须在同一个模块(或同一包,若未使用模块系统)中定义 每个 permitted 子类必须以以下三者之一开头: final class 、 sealed class 、 non-sealed class permits 列表要求 permits 后跟的是**直接子类名**,不是全限定名,且必须与密封类在同一个编译单元可访问范围内(通常为同一包;若在模块中,需确保包已导出且子类在模块内)。 不允许写接口、抽象类(除非它们确实是该密封类的直接子类) 不允许遗漏某个实际存在的直接子类,否则编译报错 不允许包含不存在的类名,或非直接子类(如孙子类) 子类必须显式声明继承权限 每个出现在 permits 中的类,都必须用以下三种修饰符之一声明,不可省略: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; final class X extends A → 不可再被继承 sealed class X extends A permits Y, Z → X 自身也是密封的,继续限制其子类 non-sealed class X extends A → 开放继承,任何类都可继承 X 常见合法示例结构 例如描述形状的封闭类型体系:
public sealed interface Shape permits Circle, Rectangle, Triangle {} final class Circle implements Shape { ... } sealed class Rectangle implements Shape permits Square {} final class Square extends Rectangle { ... } non-sealed class Triangle implements Shape { ... }
注意:接口也可密封(自 Java 17 起),规则与类一致;permits 列表写实现类,各实现类同样需标注 final/sealed/non-sealed。

相关文章