在 Java 中如果想让一个类不能被继承和修改,这时我们应该使用 final 关键字对类进行修饰。不过这种要么可以继承,要么不能继承的机制不够灵活,有些时候我们可能想让某个类可以被某些类型继承,但是又不能随意继承,是做不到的。Java 15 尝试解决这个问题,引入了 sealed 类,被 sealed 修饰的类可以指定子类。这样这个类就只能被指定的类继承。
通过密封的类和接口来限制超类的使用,密封的类和接口限制其它可能继承或实现它们的其它类或接口。
具体使用:
举例:
public abstract sealed class Shape permits Circle, Rectangle, Square {...}//密封类
public final class Circle extends Shape {...} //final表示子类不能再被继承了,间接表示父类值能被指定类继承
public sealed class Rectangle extends Shape permits TransparentRectangle, FilledRectangle {...}//子类也是一个密封类
public non-sealed class Square extends Shape {...} //non-sealed表示子类不是一个密封类,可以被任何类继承