JDK17中Sealed Classes的使用
作者:考虑考虑
Sealed类自JDK15起预览,JDK17正式纳入,通过sealed修饰限制继承,指定允许的子类,并用final或non-sealed控制继承层级,实现更精确的类继承管理,下面就来介绍一下具体使用
前言
Sealed Classes
密封类,在JDK15
已经开始预览,在JDK16
做了第二次预览,到了JDK17
转正
密封类
密封类可以理解为限制继承类,可以指定该类只能被某些子类继承,
语法类似如下: 类被 sealed 修饰,只允许(permits)类继承,继承的类必须有 final 或者 no-sealed 来修饰
密封类示例
1、定义一个密封类或者抽象密封类
public sealed class HelloService permits AClass, BClass, CClass { public String say() { return "say"; } }
这样写的话,就代表该密封类只能被AClass, BClass, CClass继承
public final class AClass extends HelloService { @Override public String say() { return "hello world"; } }
public final class BClass extends HelloService { @Override public String say() { return "hello world"; } }
public non-sealed class CClass extends HelloService { public String say() { return "say"; } }
继承的子类需要使用final
修饰,表示不可再被继承,如果子类还需要被继承,那么就是用non-sealed
修饰
3、抽象密封类
public abstract sealed class HelloService2 permits DClass { abstract String say(); }
public final class DClass extends HelloService2 { @Override String say() { return ""; } }
总结
Sealed类,提供了一种机制来精确控制类的继承链,使得更好的编码,不过就是需要升级JDK版本,看个人使用
到此这篇关于JDK17中Sealed Classes的使用的文章就介绍到这了,更多相关JDK17 Sealed Classes内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!