Singleton Design Pattern及其子类的默认构造函数

Zaw*_* oo 1 java

在我的编码中,我使用了SingletonSingleton Design Pattern.问题是为什么它的子类不允许使用默认构造函数?

我得到编译时错误:

Implicit super constructor Singleton() is not visible. Must explicitly invoke another constructor
Run Code Online (Sandbox Code Playgroud)

Singleton.java

public class Singleton {
    private static Singleton singleton;

    private Singleton() {
        System.out.println("I am user class");
    }

    public static Singleton getInstance() {
        if(singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }

}
Run Code Online (Sandbox Code Playgroud)

SubClass.java

public class SubClass extends Singleton {
    public SubClass(){
        System.out.println("I am sub class");
    }
}
Run Code Online (Sandbox Code Playgroud)

Roh*_*ain 6

当你创建一个实例时,SubClass它会自动调用constructorSuperClass来初始化它的字段,并进一步调用它的所有超类构造函数.inheritance hierarchy

现在因为你的SuperClass构造函数是私有的,所以它不能调用它.所以,你得到了那个例外..

但这对subclass一个singleton班级没有意义,因为在那种情况下,your class will no longer be singleton.

你应该re-think关注你design和你想做什么.而change你的设计也相应.