java 对于继承和实现的权限控制做了进一步的升级,使用 sealed 关键字对继承和实现的子类进行了进一步的控制,从之前人有多大胆,地有多大产的野蛮接口继承滥用的情况,导致开发者对于自己的类失去了控制,对于之后的改造要顾及之前的使用情况导致的问题,到现在按需分配,限制继承和实现的类,又限制的开放了收口,达到双赢的局面。
//密封接口Base 只能被H1 H2 继承
sealed interface Base permits H1, H2 {
}
//H6 is not allowed in the sealed hierarchy
// class H6 implements Base {
// }
permits也是关键词,后面是允许进行集成的子类名称, 被其他的类进行实现的话,会进行报错。
//限制 只有H3 能够实现H1
sealed interface H1 extends Base permits H3 {
}
final class H3 implements H1 {
}
密封类和接口,一定要有继承或者实现的子类,最终实现的类需要final关键词进行修饰,原因是final修饰的类,不能进行集成。从而达到按需分配的要求。
// non-sealed 脱离限制
non-sealed interface H2 extends Base {
}
interface H4 extends H2 {
}
interface H5 extends H2 {
}
class C1 implements H4 {
}
通过 non-sealed 关键词进行修饰的类或者接口,会拖离之前密封的限制,从而自由进行使用,这个就是说的收口,为什么还有non-sealed这种关键词,这样不是还是会进行滥用? 但是从某种角度上来说,他也是把收口都放到了H2上,从而到了限制范围的作用了。
之后的使用实践会在枚举里面看到。