一. 介绍
Jdk15中开始引入的特性,Sealed Class
密封类,用于指定类间继承关系,对类的继承进行限制作用。密封类使得开发者能够更加明确的规定类别的继承关系,是的类的继承树结构更加清晰。
再该功能下,引入三个新关键字加粗样式以及原有的final
共同限制类的关系:sealed non-sealed permits
。它们的含义如下:
sealed
:申明类别为密封类,需要与permits
同时出现,表示该类需要(必须)由permits
关键字后的几个类别进行直接或者间接的继承;
non-sealed
:用于被permits
关键字指定的类别,表示该类的子类不需要进行密封,可任意进行继承;
permits
:与sealed
同时出现,用于指定“被密封”的类。
二. 使用
1. 申明密封继承属性
[ public/private... ] [sealed/non-sealed/final] class ClassName [ (extends <PClass>)| (implements interface,...)] [permits Child,...]{
}
sealed
关键字需要与permits
关键字同时修饰,后者指定的类需要(必须)进行密封继承属性的修饰
举例
sealed class A permits B,C,D{ // B,C需要使用密封位置的关键字进行申明
}
sealed class B extends A permits E... {}
non-sealed class C extends A {} //后续继承关系自由
final class D extends A {} // 不可被继承
2. 密封使用
permits
关键字指定的类需要继承自permits
位置的类别并申明各自的密封属性。
a.直接使用
sealed class A permits B{}
final class B extends A{}
b.间接使用
sealed class A permits B{}
class C extends A{}
final class B extends C {}
三. 补充
该特性不能用于interface
。