jdk17新特性—— 密封类(Sealed Classes)

目录

    • 一、密封类(Sealed Classes)的概述
      • 1.1、概述
      • 1.2、特性
      • 1.3、注意事项
    • 二、密封类(Sealed Classes)代码示例
      • 2.1、密封类(Sealed Classes)代码结构示例
      • 2.2、密封类(Sealed Classes)代码示例
    • 三、密封类(Sealed Classes)接口代码示例
      • 3.1、密封类(Sealed Classes)接口代码结构示例
      • 3.2、密封类(Sealed Classes)接口代码示例

一、密封类(Sealed Classes)的概述

1.1、概述

  • 密封类和接口 限制哪些其他类或接口可以扩展或实现它们。

1.2、特性

  • JDK15的JEP 360: Sealed Classes (Preview)中作为预览版引入;
  • JDK16的JEP 397: Sealed ClassesSecond Preview)中第二轮预览;
  • JDK17的JEP 409: Sealed Classes中正式转正。

1.3、注意事项

  • permits指定的子类必须与父类在同一个显式命名的module下;
  • permits指定的子类必须直接继承父类;
  • permits指定的子类必须声明自己的密封类型;
  • final表示这个子类不能再被继承了;
  • non-sealed表示这个子类没有密封限制,随便继承。

二、密封类(Sealed Classes)代码示例

2.1、密封类(Sealed Classes)代码结构示例

  • 密封类(Sealed Classes)代码结构
    在这里插入图片描述

2.2、密封类(Sealed Classes)代码示例

一个类可以用sealed修饰,表示这个类只能由permits指定的子类或接口来继承或实现。

  • 抽象类Animal 由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:41* @Description: 动物类* 一个类或接口可以用sealed修饰,表示这个类或接口只能由permits子句指定的子类或接口来继承或实现。*/
    public abstract sealed class Animal permits Dog,Cat,Pig{public abstract String eat();
    }
    
  • 抽象类Animal 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:47* @Description: 抽象类Animal被sealed修饰,说明它的子类会受到限制,只能是permits子句中生命的子类的其中一个。这些子类如下**/
    public final class Cat extends Animal{@Overridepublic String eat() {return "鱼";}
    }
    
  • 抽象类Animal 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:52* @Description: 抽象类Animal被sealed修饰,说明它的子类会受到限制,只能是permits子句中生命的子类的其中一个。这些子类如下*/
    public non-sealed class Dog extends Animal{@Overridepublic String eat() {return "骨头";}
    }
    
  • 类Pig由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 19:59* @Description: 抽象类Animal被sealed修饰,说明它的子类会受到限制,只能是permits子句中生命的子类的其中一个。这些子类如下*/
    public sealed class Pig extends Animal permits White,Black{@Overridepublic String eat() {return "饲料";}
    }
    
  • 类Pig由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 20:03* @Description:*/
    public non-sealed class White extends Pig{
    }
    
  • 类Pig 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day2;
    /*** @Author: xz* @Date: 2024-01-31 20:09* @Description:*/
    public final class Black extends Pig{}
    

三、密封类(Sealed Classes)接口代码示例

3.1、密封类(Sealed Classes)接口代码结构示例

  • 密封类(Sealed Classes)接口代码结构
    在这里插入图片描述

3.2、密封类(Sealed Classes)接口代码示例

一个接口可以用sealed修饰,表示这个接口只能由permits指定的子类或接口来继承或实现。

  • 接口Animal 由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day3;/*** @Author: xz* @Date: 2024-01-31 20:11* @Description:*/
    public sealed interface Animal permits Cat,Dog,Pig{String eat();
    }
    
  • 接口Animal由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:15* @Description:*/
    public final class Dog implements Animal{@Overridepublic String eat() {return "骨头";}
    }
    
  • 接口Animal由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:18* @Description:*/
    public non-sealed class Cat implements Animal{@Overridepublic String eat() {return "鱼";}
    }
    
  • 接口Pig由sealed修饰,只能由permits指定的子类或接口来继承或实现。

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:21* @Description: 注意接口可以被实现,也可以被继承。*/
    public sealed interface Pig extends Animal permits Black,White {String eat();
    }
    
  • 接口Pig由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。non-sealed表示这个子类没有密封限制,随便继承

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:24* @Description:*/
    public non-sealed class White implements Pig{@Overridepublic String eat() {return null;}
    }
    
  • 接口Pig 由sealed修饰,说明它的子类会受到限制,只能是permits子句中的子类的其中一个。final表示这个子类不能再被继承了。

    package com.xz.jdk17.day3;
    /*** @Author: xz* @Date: 2024-01-31 20:27* @Description:*/
    public final class Black implements Pig{@Overridepublic String eat() {return null;}
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/659471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序~上推加载更多组件

本组件使用的是TaroReact 实现的 ,具体代码如下 一共分为tsx和less文件 //index.tsx /** RefreshLoading* description 上推加载更多组件* param loading boolean* param style* returns*/import { View } from "tarojs/components"; import React, { FC…

2023蓝帽初赛

APK取证 1.涉案apk的包名是?[答题格式:com.baid.ccs] 用雷电APP智能分析打开 在基本信息里得到应用包名 答案:com.vestas.app 2.涉案apk的签名序列号是?[答题格式:0x93829bd] 同理,在详细信息里面找到了签名序列号 答案&…

nodejs+vue+mysql校园失物招领网站38tp1

本高校失物招领平台是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了用户和管理员这两者的需求。操作简单易懂,合理分析各个模块的功能,尽可能优化界…

立体边界,让arcgis出图更酷炫一些

就是这样子的那个图—— 本期我们还是用长沙市为例, 来手把手的演示制作立体边界, 就是这个样子的边界—— 第一步—准备底图 其实你准备什么底图都可以哈,例如调用天地图、下载个影像图,或者用其他什么的底图,都是…

在ubuntu22.04中借助docker实现安装、调试ros1.0

一.安装docker 参考:https://www.cnblogs.com/cqpanda/p/16247919.html 使用安装方法1直接安装,没出问题,我就继续了。出问题按方法2安装吧。 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 二.docker中安装ros1.…

基于微信小程序+Springboot线上租房平台设计和实现【三端实现小程序+WEB响应式用户前端+后端管理】

博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【乳腺肿瘤诊断分类及预测】基于PNN概率神经网络

课题名称:基于PNN的乳腺肿瘤诊断分类及预测 版本日期:2023-06-15 运行方式: 直接运行PNN0501.m 文件即可 代码获取方式:私信博主或QQ:491052175 模型描述: 威斯康辛大学医学院经过多年的收集和整理,建…

Selenium处理Alert弹窗

页面弹窗有 3 种类型: alert(警告信息) confirm(确认信息) prompt(提示输入) 对于页面出现的 alert 弹窗,Selenium 提供如下方法: 序号 方法/属性 描述 1 ac…

如何更改Outlook阅读邮件时的默认字体?

如果收到的邮件中未指定字体,outlook默认使用宋体显示。 如果觉得不好看,可以进行更改。但不是在outlook中更改,outlook中只是修改编辑器中的字体,和纯文本邮件浏览的字体,不能更改未指定字体的HTML邮件的显示字体。 …

TensorFlow2实战-系列教程5:猫狗识别2------数据增强

🧡💛💚TensorFlow2实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Jupyter Notebook中进行 本篇文章配套的代码资源已经上传 猫狗识别1 数据增强 猫狗识别2------数据增强 猫狗识别3------迁移学习 1、猫狗识别任…

C++:CSDN云服务器

每一次打开我的个人中心——(T_T) 1、右下角加载个不停...... (耗时一分钟) 2、闪白影...... (耗时30秒) 3、加载出浏览器...... (耗时10秒) 4、打开\加载网站...... &#xff0…

Unity 模板方法模式(实例详解)

文章目录 简介示例1:游戏关卡流程示例2:测试试卷类示例3:游戏场景构建流程示例4:游戏动画序列示例5:游戏对象初始化过程 简介 Unity中的模板方法模式是一种行为设计模式,它在父类中定义了一个算法的框架&a…

【百度Apollo】自动驾驶规划技术:实现安全高效的智能驾驶

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下…

Unity之做一个最简单的FPS游戏demo

目录 😋FPS游戏Demo 💤1.新建FPS模板项目 ⚒️2.装备枪 💣3.设置射击功能 📺4.制造一个子弹预制体 🎮5.发射子弹 说起来小编学Unity差不多一个月了,都是利用上班摸鱼时间学的(doge.jpg&…

FreeRTOS_Stm32F407系列单片机标准库移植

这里写目录标题 1、下载FreeRTOS源码1.1github仓库下载1.2官网下载1.3百度网盘下载 2、FreeRTOS移植2.1首先需要有一个可运行的标准库工程2.2在工程内创建一个FreeRTOS文件夹,然后在FreeRTOS文件夹中再新建port、include、src三个文件夹。2.3 port文件夹移植2.4 inc…

使用草料二维码表单功能,让数据收集更高效、规范

功能介绍 表单作为草料二维码的高级功能之一,可用于收集格式统一的数据。你可以通过组合姓名、图片、检查项等组件搭建出电子表单,关联到二维码中,扫码填写表单即可更快速、规范的收集数据。 这些数据保存在账号下形成动态档案,…

【 USRP 相控阵】X波段相控阵开发平台用户指南

包装 一共三件。 1、AD9081-FMCA-EBZ AD9081 MxFE Evaluation Board, https://www.analog.com/eval-ad9081 AD9081 的全功能评估板使用 ACE 软件进行控制的 PC 软件HMC7044 的板载时钟用于管理套件和 FPGA 时钟选择切换到外部直接时钟 AD9081-FMCA-EBZ 评估板包括以各种模…

CTF-WEB的入门真题讲解

EzLogin 第一眼看到这个题目我想着用SQL注入 但是我们先看看具体的情况 我们随便输入admin和密码发现他提升密码不正确 我们查看源代码 发现有二个不一样的第一个是base64 意思I hava no sql 第二个可以看出来是16进制转化为weak通过发现是个弱口令 canyouaccess 如果…

电镀槽槽号识别(接近开关BCD码检测)

电镀槽的槽号识别,常用方法有: 1、激光测量 2、8421码识别 3、伺服定位 4、RFID识别 这篇博客我们介绍利用接近开关和8421码检测识别槽号,电镀取放请求FC详细介绍可以查看下面博客: https://rxxw-control.blog.csdn.net/article/details/135536149https://rxxw-contr…

UE4 C++ 数据表

//基于结构体变量类型,创建数据表DataTable类型 USTRUCT(BlueprintType) struct FMyDataTableStruct : public FTableRowBase //把结构体变量公开到数据表类型 {GENERATED_BODY() //必须添加“GENERATED_BODY()”UPROPERTY(EditAnywhere, BlueprintReadWrite, Categ…