用Java中的私有默认构造函数对类进行子类化



假设我有一个带有私有构造函数的类A,以及扩展它的类B

public class A {
private A() {}
}
public class B extends A {
public B(){
// error - there is no default constructor available in 'A'
}
}

我知道可以通过Java反射调用私有构造函数,但如何在B构造函数中实现呢?谢谢

如果类B扩展了A,而A的构造函数是私有的,则除非两个类都作为内部类定义在同一文件中,否则子类化是不可能的(请参阅防止类实例化(。这是因为子类的构造函数执行(显式或隐式(super()调用。super()调用基本上只是对匹配构造函数的调用,如果该构造函数被声明为private,则该调用不可能来自某个外部类(例如,在不同文件中定义的类(。

最新更新