密封类(Java17)
是用来规定父类能被特定子类继承的类,与 final 相区别,final一旦定义就不能被所有类继承
定义
在 class 前面加 sealed 同时在类名后面加 permits 类名 表示其允许继承的子类:
public sealed class Person permits Student{
}
要求
密封类型有以下要求:
- 可以基于普通类、抽象类、接口,也可以是继承自其他接抽象类的子类或是实现其他接口的类等
- 必须有子类继承,且不能是匿名内部类或是lambda的形式
sealed写在原来final的位置,但是不能和final、non-sealed关键字同时出现,只能选择其一。- • 继承的子类必须显式标记为
final、sealed或是non-sealed类型。
标准声明
父类
public sealed [abstract] [class/interface] 类名 [extends 父类] [implements 接口, ...] permits [子类, ...]{
//里面的该咋写咋写
}
子类
public [final/sealed/non-sealed] class 子类 extends 父类 { //必须继承自父类
//final类型:任何类不能再继承当前类,到此为止,已经封死了。
//sealed类型:同父类,需要指定由哪些类继承。
//non-sealed类型:重新开放为普通类,任何类都可以继承。
}