JAVA - 密封类
除非一个类声明为final,否则任何人都可以派生这个类的子类。但是如果想对它有更多控制权那?指定它的具体子类,阻止被人派生父类的子类。 在Java中 ,密封类(sealed class) 会控制哪些类可以继承它。Java15中作为一个预览特性增加了密封类,并在Java17中确定了这个特性
案例:
package com.demo;
//指定只有B,C 类可以继承A
public sealed class A permits B,C {
}
如果类D 去继承 类A则编译不会通过:
同时类A也会有编译错误:
一个密封类允许的子类必须是可访问的。它们不能是嵌套在另一个类中的私有类,也不能是位于另外一个包中的包可见的类。对于允许的公共子类,规则更为严格。它们必须与密封类在同一个包中。不过,如果使用模块,则必须在同一个模块中
如下,位于com.demo包中的类A虽然允许D继承,但是D位于com.demo2中,编译不会通过
密封类的子类必须指定它是sealed、final、还是允许继续派生子类。对于最后一种情况,必须声明为no-sealed
no-sealed 类:
声明密封类可以不加permits 子句。这样一来,它的所有直接子类都必须在同一个文件中声明。不能访问这个文件的程序员就不能派生它的子类
package com.demo2;
public sealed class A {
}
final class B extends A {
}
final class C extends A {
}
本文来自博客园,作者:chuangzhou,转载请注明原文链接:https://www.cnblogs.com/czzz/p/17765436.html