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的许可中
注意:密封类及其允许的子类必须属于同一模块,如果在未命名模块中声明,则属于同一软件包。每个允许的子类都必须直接扩展密封的类。