1、使用示例
public sealed interface Service permits Car, Truck {
int getMaxServiceIntervalInMonths();
default int getMaxDistanceBetweenServicesInKilometers() {
return 100000;
}
}
相关文档:http://openjdk.java.net/jeps/409
2、sealed密封类的作用
限制另一个接口扩展的接口。限制哪些类能够实现特定接口。
1)可以限制其他接口扩展的接口,并只为允许扩展该接口的某些特定接口制定规则。
例如,
public sealed interface MotherInterface permits ChildInterfacePermitted {}
//必须声明为密封或非密封
public non-sealed interface ChildInterfacePermitted extends MotherInterface {}
public interface AnotherChildInterface extends MotherInterface {}
//编译器错误!它不包含在MotherInterface的许可中
2)现在可以创建一个接口,并只选择允许实现该接口的特定类。不允许所有其他类实现它。
例如,
public sealed interface MotherInterface permits ImplementationClass1 {}
//必须被定义为最终的,或者是密封的,或者是非密封的
public final class ImplementationClass1 implements MotherInterface {}
public class ImplementationClass2 implements MotherInterface {}
//编译器错误!它不包含在MotherInterface的许可中
注意:密封类及其允许的子类必须属于同一模块,如果在未命名模块中声明,则属于同一软件包。每个允许的子类都必须直接扩展密封的类。