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的,对比上面的例子结构更简洁

官方文档:https://openjdk.org/projects/jdk/17/

posted @   PerfectLi  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示