假设我们有以下代码:
class Test {
private Test() {
System.out.println("test");
}
}
public class One extends Test {
One() {
System.out.println("One");
}
public static void main(String args[]) {
new One();
}
}
当我们创建一个对象One
时,它最初被称为父类构造函数Test()
。但由于 Test()
是私有(private)的 - 我们得到一个错误。
一个很好的例子和摆脱这种情况的方法是多少?
最佳答案
没有出路。您必须创建一个可用的(protected
、public
或默认) super 构造函数才能扩展 test
。
这种表示法通常用于实用程序类或单例中,您不希望用户通过扩展它并实例化子类或简单地调用您的构造函数来创建自己的类的实例类。
当你有一个只有 private
构造函数的 class
时,你也可以将 class
更改为 final
因为根本无法扩展。
另一种解决方案是在 test
中创建一个方法,该方法创建 test
的实例并将每个方法调用从 One
委托(delegate)给 测试
实例。这样您就不必扩展 test
。
class Test {
private Test() {
System.out.println("test");
}
public static Test getInstance(){
return new Test();
}
public void methodA(){
//Some kind of implementation
}
}
public class One {
private final Test test;
One() {
System.out.println("One");
test = Test.getInstance();
}
public void methodA(){
test.methodA();
}
public static void main(String args[]) {
new One();
}
}
关于java - 使用私有(private)构造函数扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3952815/