Java密封类permits、sealed

2023-05-30

https://openjdk.org/jeps/360
(15)JEP 360: Sealed Classes (Preview)
(16)JEP 397: Sealed Classes (Second Preview)
(17)JEP 409: Sealed Classes


首先,sealedv. 封上,密封adj. 密封的
可以用来修饰类或者接口
修饰类(包含abstract class)时,需要用permits来限制哪些类或抽象类可以继承该类。
修饰接口时,需要用permits来限制哪些接口可以继承或者哪些类可以来实现该接口。

对于继承或者实现了sealed class或者sealed interface的接口、抽象类、类 必须显式的指定是sealed的、non-sealed或者finnal(只能用在类上,接口不行)

sealed:表示当前类或者接口是密封的,只能由指定的子类、子接口来继承或实现。
non-sealed:修饰类/接口,用来描述这个类/接口为非密封类/接口,用来解除密封。
finnal:。
permits:用在类名或者接口名之后,指定可以继承或实现的类

## getPermittedSubclasses方法

Class类也增加了    public Class<?>[] getPermittedSubclasses() {} 方法,用来获取被允许的子类或者子接口。

1. so,为什么子类或者接口可以non-sealed?  

sealed只限制哪些东西(子接口、子类)可以继承、实现"我的"某些功能和属性,比如,我指定要把遗产给我XX,但是XX再把钱给谁我就不想管了。