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

浙公网安备 33010602011771号