Java 不会阻止使用私有构造函数对类进行子类化。
public class Main {
static class A {
private A() {
System.out.println("Subclassed A in "+getClass().getName());
}
}
static class B extends A {
public B() {
}
}
public static void main(String... ignored) {
new B();
}
}
印刷
Subclassed A in Main$B
它阻止的是无法访问其超类的任何构造函数的子类。这意味着私有构造函数不能在另一个类文件中使用,并且包本地构造函数不能在另一个包中使用。
在这种情况下,您唯一的选择是委派。您需要调用工厂方法来创建“超级”类的实例并包装它。