小编典典

使用私有构造函数扩展类

java

假设我们有以下代码:

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()私人的一样-
我们收到一个错误。一个好的例子和解决这个问题的方法是多少?


阅读 257

收藏
2020-09-15

共1个答案

小编典典

没有出路。你必须创建一个可用的(protectedpublic或默认)的超级构造函数能够延长test

这种表示法通常用于实用程序类或单例中,在这种情况下,您不希望用户通过扩展实例和实例化子类,或者只是通过调用类的构造函数来自己创建类的实例。

当您只有一个class具有private构造函数的时,您也可以将更class改为,final因为它根本无法扩展。


另一个解决方案是使用一种方法,在test其中创建的实例test并将每个方法调用委托Onetest实例。这样,您不必扩展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();
    }
}
2020-09-15