JDK17新特性
密封类(Sealed Classes)
Sealed Classes和interfaces限制了有哪些类可以继承和实现他们
目标
1.限制有哪些类可以继承和实现他们
2.提供一种具体的修饰符,更声明性的限制继承和实现
3.通过提供详尽分析模式,为进一步模式匹配提供基础
密封类对其子类有以下约束:
1密封类及其子类必须在同一模块总,如果是未命名的模块中,必须在同一个包中;
2密封子类必须直接扩展密封父类
3.允许的子类可以用final声明,防止其结构进一步扩展
4.允许子类型可以声明为密封类。允许层结构的部分比密封的超累扩展得更多。
5.允许子类可以声明为非密封类。以便其层级结构的一部分恢复为开放
abstract sealed class Shape permits Circle,Rectangle,WeirdShape{}
public final class Circle extends Shape{}
public sealed class Rectangle extends Shape permits TransparentRectangle,FilledRectangle{}
public final class TransparentRectangle extends Rectangle{}
public final class FilledRectangle extends Rectangle{}
public non-sealed class WeirdShape extends Shape{}
当限制类数量比较少,可以在一个同一个类文件中定义, 限制类可以省略限制语句,具体如下所示
abstract sealed class Root{
final class A extends Root{}
final class B extends Root{}
final class C extends Root{}
}
密封接口
在任何用于指定超接口的extends子句之后,使用permit子句指定实现类和子接口
密封record类
record类是隐式final的,对比上面的例子结构更简洁
分类:
JAVA基础 / JDK
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏