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;} }
相关文章:

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)接口代码结构示…...

【亿级数据专题】「分布式消息引擎」 盘点本年度我们探索服务的HA高可用解决方案
盘点本年度我们探索服务的HA高可用解决方案 前言介绍HA高可用高可用性评估可用性是平均故障间隔时间 HA技术架构的特性分析Master/Slave架构主从复制模式主从复制的特性分析 高可用案例RocketMQ的主从架构责任划分同步机制动态化RocketMQ高可用架构中有限状态机的转换 总结Mast…...

计算机网络-物理层设备(中继器 集线器)
文章目录 中继器中继器的功能再生数字信号和再生模拟信号同一个协议 集线器(多口中继器)不具备定向传输的原因集线器是共享式设备的原因集线器的所有接口都处于同一个碰撞域(冲突域)内的原因 小结 中继器 中继器的功能 中继器的…...
PaddleDetection学习4——使用Paddle-Lite和OpencCV在 Android 上实现实时的人脸检测(java)
使用Paddle-Lite在 Android 上实现人脸检测 1 环境准备2. 部署步骤2.1 下载PaddleLite-android-demo2.2 运行face_detection_demo项目3 导入OpenCV进行优化3.1 Android Studio配置OpenCV3.2 预处理代码3.3 后处理代码3.4 优化结果1 环境准备 参考前一篇在 Android 上使用Paddl…...

mkcert的安装和使用,5分学会在本地开启localhost的https访问方式
mkcert官方仓库地址:https://github.com/FiloSottile/mkcert#installation mkcert 是一个简单的工具,用于制作本地信任的开发证书。它不需要配置。 简化我们在本地搭建 https 环境的复杂性,无需操作繁杂的 openssl 实现自签证书了ÿ…...

RHCE DNS域名解析服务器
目录 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 1.3 DNS配置 1.4 测试 2. 反向解析 2.1 关闭安全软件,安装必要软件 2.2 配置静态ip 2.3 DNS配置 2.4 测试 1. 正向解析 1.1 安装必要软件 1.2 配置静态ip 服务器配置 nmcli c modify ens32 ipv4.method man…...

创建表与删除表(六)
表的基本操作(六) 一、创建表 1.1 使用DDL语句创建表 CREATE TABLE 表名(列名 类型,列名 类型......); 示例: 创建一个 employees 表包含雇员 ID ,雇员名字,雇员薪水。 create table employees(employee_id int,em…...

微信开发者工具 git 拉取 failed invalid authentication scheme
微信开发者工具 git 拉取 failed invalid authentication scheme 拉取代码时报错,无效身份认证 解决方案: 1.检查git地址是否正常 2.检查git用户名密码是否正确...
(4)Elastix图像配准:3D图像
文章目录 前言1、项目实战2、参数文件2.1、parameter_file_rigid_3D.txt2.2、parameter_file_affine_3D.txt2.3、parameter_file_bspline_3D.txt前言 (1)Elastix图像配准:原理 + 源码(详解) (2)Elastix图像配准:参数文件(配准精度的关键) 1、项目实战 将以下文件保…...

windows安装oracle之后怎么连接使用
目录 1.打开SQl Developer 2.选择JDK 3.登录 4.创建表空间,用户 安装oracle的详细教程 WINDOWS安装Oracle11.2.0.4-CSDN博客 1.打开SQl Developer 找到 SQl Developer 2.选择JDK 根据你安装的oracle版本,因为我的oracle是安装的32位的,所以这里jdk也要选择32位 选择到ja…...
在前端开发中,常见的数组循环方式有以下几种:
在前端开发中,常见的数组循环方式有以下几种: for 循环:使用最传统的 for 循环来遍历数组元素。 const array [1, 2, 3, 4, 5];for (let i 0; i < array.length; i) {console.log(array[i]); }forEach() 方法:使用数组的 …...
Redis -- 单线程模型
失败是成功之母 ——法国作家巴尔扎克 目录 单线程模型 Redis为什么这么快 单线程模型 redis只使用一个线程,处理所有的命令请求,不是说redis服务器进场内部真的就只有一个线程,其实也有多个线程,那就是处理网络和io的线程。 R…...

C语言第十五弹---操作符(上)
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 操作符 1、操作符的分类 2、二进制和进制转换 2.1、2进制转10进制 2.1.1、10进制转2进制数字 2.2、2进制转8进制和16进制 2.2.2、2进制转16进制 3. 原码、反…...

使用宝塔面板访问MySQL数据库
文章目录 前言一、安装访问工具二、查看数据库总结 前言 前面我们已经部署了前后端项目,但是却不能得到数据库的信息,看有谁再使用你的项目。例如员工、用户等等。本次博客进行讲解如何在宝塔面板里面访问MySQL数据库。 一、安装访问工具 1、打开软件商…...

Win10 双网卡实现同时上内外网
因为需要同时上内网和外网,但公司做了网络隔离,不能同时上内外网,所以多加了块无线网卡,配置双网关实现同时上内外网,互不影响 打开 Windows PowerShell(管理员),输入:ro…...

Django模型(六)
一、其它查询 文档:https://docs.djangoproject.com/zh-hans/4.1/ref/models/querysets/#count 1.1、排序 Queryset.order_by(*fields) 默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的 可以通过使用 order_by 方法在每个 QueryS…...

【Linux】Linux基本指令
目录 1.ls指令 2.cd指令 3.touch指令 4.mkdir指令 5.rmdir指令和rm指令 5.1rmdir指令 5.2rm指令 6.man指令 7.cp指令 8.mv指令 9.cat指令 10.more指令 && less指令 10.1more指令 10.2less指令 11.head指令 && tail指令 11.1head指令 11.2tai…...

stm32中的SPI
SPI的简介 文章目录 SPI的简介物理层协议层基本通讯过程起始和终止信号数据有效性CPOL/CPHA及通讯模式 STM3的SPI特性及架构通讯引脚时钟控制逻辑数据控制逻辑整体控制逻辑通讯过程 代码配置实现指令集结构体的定义SPI时钟信号的定义SPI端口定义SPI命令 flash驱动代码初始化代码…...

ChatGPT可与自定义GPTs一起使用,智能AI代理时代来啦!
1月31日凌晨,OpenAI在社交平台公布了一个超强新功能,可以在ChatGPT中输入“GPTs名字”的方法,调用多个自定义GPTs一起协同工作。 例如,我想开发一款社交APP,1)可以先用专业分析GPTs做一下市场调研…...

《Numpy 简易速速上手小册》第1章:Numpy 基础(2024 最新版)
文章目录 1.1 创建和操作 Numpy 数组1.1.1 基础知识1.1.2 完整案例:多维数据分析1.1.3 拓展案例 1:时间序列数据1.1.4 拓展案例 2:图像数据处理 1.2 数组的索引和切片1.2.1 基础知识1.2.2 完整案例:时间序列分析1.2.3 拓展案例 1&…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...