首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >大清秘史之大话JDK17 中的密封类

大清秘史之大话JDK17 中的密封类

原创
作者头像
西门呀在吹雪
发布2025-12-09 15:14:35
发布2025-12-09 15:14:35
1950
举报
文章被收录于专栏:架构之巅架构之巅

在 Java 17 中,sealed 类(密封类)就像是 🏛️ 皇位继承制度 ,它明确规定:哪些类可以继承自己,不允许“外人”随意篡位!

🧐 核心概念

sealed 修饰的类,必须通过 permits 指定谁能继承它。继承者只能是 final(断绝后代)、sealed(继续指定继承人)或 non-sealed(开放继承,等于不用sealed修饰,但是不能省略)。

👑 历史类比

让我们用八卦来清晰的了解一下这个修饰符的作用,想象清朝皇位传承:

  • sealed class 清朝皇帝 → 只允许 permits 康熙, 雍正, 乾隆
  • 康熙雍正乾隆都是 皇阿玛或者老祖宗亲自指定的 → 正统皇帝。
  • 袁世凯 想复辟称帝?❌ 编译直接报错!因为他不在 permits 名单里,无法继承“清朝皇帝”这个类。
  • 正统皇帝也可以宣布不传位给儿子们 non-sealed不再世袭罔替

💡 实际作用

  1. 🚧 严格管控继承:避免类被随意扩展,破坏设计。
  2. 🎯 增强可读性:一看 permits 就知道有哪些子类。
  3. 🔍 配合模式匹配:switch 检查密封子类时,编译器能智能判断是否覆盖所有情况。

✨ 作用域

  1. 🪵接口
  2. 🏕️类

🚨 使用限制

  1. 同包名下生效
  2. 每个子类必须使用以下三种修饰符之一:

修饰符

含义说明

final

表示该子类不能再被继承(终结继承链,光绪->宣统(不是亲儿子)

sealed

表示该子类仍可被限定继承,需继续声明 permits

non-sealed

表示该子类不再限制继承,任何类都可继承它,等价于不使用sealed,因为语法限制,不可省略

✨ 总结

密封类就是 “正大光明匾后面的皇位继承名单” 🏮,既保证了血统纯正,又防止了“袁世凯式”的意外篡位,让代码架构更清晰、更安全!

⚓️ show me code时间

代码语言:java
复制
// 父类、接口定义
public sealed interface KingInterface permits GuangxuClass, YongzhengClass {
    //登基
    void release();
    //谥号
    void dead();
}

//子类实现 限制继承子类
public sealed class YongzhengClass implements KingInterface permits QianlongClass {
    @Override
    public void release() {
        System.out.println("Yongzheng release");
    }

    @Override
    public void dead() {
        System.out.println("Yongzheng dead");
    }
}


//子类实现 不限制继承
public non-sealed class GuangxuClass implements KingInterface {
    @Override
    public void release() {
        System.out.println("Yongzheng release");
    }

    @Override
    public void dead() {
        System.out.println("Yongzheng dead");
    }
}

//袁世凯.......的机会来了
public class YuanshikaiClass extends GuangxuClass{
    //登基
    @Override
    public void release() {
        System.out.println(" Yuanshikai 复辟了");
    }

    //谥号
    @Override
    public void dead() {
        System.out.println(" Yuanshikai 薨了");
    }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🧐 核心概念
  • 👑 历史类比
  • 💡 实际作用
  • ✨ 作用域
  • 🚨 使用限制
  • ✨ 总结
  • ⚓️ show me code时间
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档