Java 中的密封类2024年9月10日 | 阅读 6 分钟 在编程中,安全性和控制流是开发应用程序时必须考虑的两个主要问题。有各种控制特性,例如 final 和 protected 关键字的使用会限制用户访问变量和方法。Java 15 引入了一个新的预览功能,允许我们控制继承。在本节中,我们将通过适当的示例讨论预览功能、密封类和接口的概念。 Java 密封类Java 15 引入了密封类的概念。这是一个预览功能。Java 密封类和接口限制了哪些类和接口可以扩展或实现它们。 换句话说,我们可以说,一个不能被继承但可以被实例化的类称为密封类。它允许类和接口对其允许的子类型拥有更多控制权。它对于通用域建模和为库构建更安全的平台都很有用。 请注意,密封类的概念是预览功能,而不是永久功能。 预览功能一种其设计、实现和规范已完成但尚未永久化的功能。在未来的 Java SE 版本中,该功能可能以不同形式存在,也可能不存在。 此外,请注意,具有预览功能的代码无法轻松编译和运行。它需要额外的命令行选项。 使用预览功能如果我们在 Java 程序中使用预览功能,我们必须在编译器和运行时系统中显式启用该预览功能。如果我们不启用预览功能,我们将收到错误消息“预览功能默认禁用”。 使用以下命令编译具有预览功能的 Java 程序 或 其中 n 是 JDK 版本。 假设 Demo.java 是一个包含预览功能的源文件,我们想编译并运行它。 当我们编译上述源文件时,控制台会收到以下警告消息: 注意:Demo.java 使用预览语言功能。注意:使用 -Xlint:preview 重新编译以获取详细信息使用以下命令运行具有预览功能的 Java 程序 注意:使用旧版本 Java SE 的预览功能编写的代码不一定能在新版本中编译或运行。密封类的用途密封类与以下内容配合效果良好
密封类和接口的优势
定义一个密封类密封类的声明并不复杂。如果我们要将一个类声明为密封类,请在其声明中添加sealed修饰符。在类声明和 extends 和 implements 子句之后,添加permits子句。该子句指定了可以扩展密封类的类。 它包含以下修饰符和子句
例如,以下 Subjects 类的声明指定了四个允许的子类:English、Science、Mathematics 和 Physics。 Subjects.java 让我们在与密封类相同的模块或包中定义四个允许的子类:English、Science、Mathematics 和 Physics。 English.java Science.java Mathematics.java Mathematics 类有一个进一步的子类 AppliedMathematics AppliedMathematics.java Physics.java 另一方面,我们也可以在同一个文件中定义允许的子类。在这种情况下,我们可以省略 permits 子句 允许子类的约束如果一个类被定义为密封类,它会对其允许的子类施加以下三个限制: 1. 所有允许的子类必须与密封类属于同一个模块或包。例如 假设我们有相同的未命名模块和以下包 或 我们将收到错误“该类不允许从另一个包或模块扩展密封类。” 2. 每个允许的子类都必须显式扩展密封类。 3. 每个允许的子类都必须定义一个修饰符:final、sealed 或 non-sealed。 密封接口与密封类一样,我们也可以通过在接口名称前添加 sealed 修饰符来定义一个密封接口。之后,使用 extends 关键字(如果需要),然后定义 permits 子句。 该接口只允许 Mango 和 Pineapple 实现它。 让我们通过一个 Java 程序来理解密封类的概念。 注意:在执行以下程序之前,请确保您的系统已安装 Java 15 或更高版本。否则,您将收到错误。密封类示例SealedClassExample.java 输出 The age of grandfather is: 87 下一个主题Java 中的驼峰命名法 |
可以使用 SimpleTimeZone 类的 setRawOffset() 函数将基本时区偏移量设置为 GMT。为了获得本地时间,将偏移量应用于 UTC。语法:public void setRawOffset(int offsetMillis) 参数:该函数唯一的参数是 offsetMillis,它给出……
阅读 3 分钟
在 Java 中,创建对象的克隆或副本是一项非常重要的任务。在本节中,我们将讨论 Java 中的浅拷贝是什么以及如何创建 Java 对象的浅拷贝。在讨论浅拷贝之前,首先...
阅读 3 分钟
java.text.RuleBasedCollator 类具有 getCollationElementIterator() 函数。通过 RuleBasedCollator 类获取提供的字符迭代器对象的排序元素迭代器对象。语法:public CollationElementIterator getCollationElementIterator(CharacterIterator source) 参数:字符迭代器对象可以作为参数传递给此函数。返回值:...
阅读 3 分钟
N 级楼梯问题,也称为楼梯爬升问题。这是一个经典的动态规划挑战。该问题通常询问:给定一个楼梯,有多少种不同的方法可以爬到顶部?如果你只能爬一两个台阶……
7 分钟阅读
Java 中唯一接受三个操作数的条件运算符是三元运算符。Java 程序员经常将其用作 if-then-else 表达式的单行替代方案。三元运算符可以替代 if-else 语句,甚至可以用于...
阅读 3 分钟
Java 中的多线程 在 Java 中,多线程是指并发运行两个或多个线程的能力。在程序内可以独立运行的最小进程单元称为线程。多线程主要用于通过同时执行多个任务来提高程序性能。Java 的……
阅读 4 分钟
Java 作为一种面向对象的编程语言,提供了在其他类内部定义类的能力。这种概念允许更好地组织和封装代码。在此上下文中经常出现的两个术语是嵌套类和内部类。虽然它们有关联,但它们服务于...
阅读 4 分钟
在本节中,我们将学习什么是 Tetranacci 数,并创建 Java 程序来检查给定的数是否为 Tetranacci 数。Tetranacci 数程序经常在 Java 编码面试和学术界出现。Tetranacci 数 Tetranacci 数类似于...
阅读 3 分钟
数独是一种基于逻辑的谜题,它使用组合数字放置。在经典的数独谜题中,任务是将数字填写到一个 9x9 的网格中,使得每一行、每一列以及每一个 3x3 的子网格都包含...
7 分钟阅读
Java是一种广泛使用的编程语言,以其健壮性和安全性而闻名。然而,即使在最谨慎编写的程序中,也可能发生错误。一种常见的错误类型是“Illegal Argument Exception”。在本节中,我们将探讨这个异常...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India