Java 17 密封类型
介绍
我们希望只有指定的类可以继承我们的类 而不是final那种不可继承的类
语法
- 密封类型有以下要求:
- 可以基于普通类、抽象类、接口,也可以是继承自其他接抽象类的子类或是实现其他接口的类等。
- 必须有子类继承,且不能是匿名内部类或是lambda的形式。
- sealed写在原来final的位置,但是不能和final、non-sealed关键字同时出现,只能选择其一。
- 继承的子类必须显式标记为final、sealed或是non-sealed类型。
- 代码实现
//密封类a 允许继承b c d
sealed class a permits b, c, d {
}
//1. 继承了a的密封类b 允许继承e
sealed class b extends a permits e {
}
//1.1 继承了b的final类 e
final class e extends b {
}
//2. 继承了a的final类 c
final class c extends a {
}
//3. 继承了a的非密封类 d
non-sealed class d extends a {
}
//3.1 non-sealed以后就没有要求了
class f extends d {
}