Java 如何扩展单例类

Java 如何扩展单例类,java,class,inheritance,singleton,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

如何扩展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;
 }
}

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

private Demo() {...}
如果演示类没有对子类可见的无参数构造函数,则需要告诉Java要调用哪个超类构造函数。如果你有

protected Demo(String param) {...}
那你就可以了

protected SubDemo() {
    super("something");
...
}
和/或

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

请注意,如果您的演示类没有非私有构造函数,您将无法有效地扩展它,并且(如果可能的话)您需要将演示类中至少一个构造函数的保护级别更改为您的子类可以访问的级别,例如
protected

java?什么是prog lang除了@AbdennourToumi的评论外,请将代码发布到您的Demo()类和您试图扩展的原始单例中,以帮助我们排除故障。在最初的singleton类中似乎有一个私有构造函数。错误消息表明是java,但我同意上面的评论-你应该为这个问题添加更多细节,如果正确的话,用java标记它。我认为,singleton类的行为不是特定于语言的,因此,我没有为Java添加标记,
protected
的可能副本是我要寻找的