如何扩展Singleton类

时间:2014-05-10 06:44:57

标签: java class inheritance singleton

如何扩展Singleton类? 我收到错误: 隐式超级构造函数Demo()不可见。必须显式调用另一个构造函数。

package demo;

public class Demo {

 private static Demo instance;

 private Demo(){}

 public static Demo getInstance(){
    if(instance ==null){
        instance=new Demo();
    }
    return instance;
 }
}

1 个答案:

答案 0 :(得分:2)

它并不严格地说它是一个单例,但默认情况下,当你扩展一个类时,Java将在构造子类时调用父的无参数构造函数。通常,为了阻止人们创建单例类的随机实例,单例的无参数构造函数将被设为私有,例如。

private Demo() {...}

如果你的Demo类没有一个对子类可见的无参数构造函数,你需要告诉Java要调用哪个超类构造函数。例如。如果你有

protected Demo(String param) {...}

然后你可以做

protected SubDemo() {
    super("something");
...
}

和/或

SubDemo(String param) {...}
{
    super(param);
}

请注意,如果您的Demo类没有非私有构造函数,您将无法对其进行有用的扩展,并且(如果可能)您需要更改Demo中至少一个构造函数的保护级别将类转换为子类可访问的内容,例如protected