2014-05-10 75 views
-1

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

package demo; 

public class Demo { 

private static Demo instance; 

private Demo(){} 

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

java?什么是编程lang –

+0

除了@ AbdennourToumi的评论之外,请将代码发布到您的Demo()类和您试图扩展的原始单例以帮助我们排除故障。看起来像你在原始单例类中有一个私有构造函数。 –

+0

错误消息表示java,但我同意上面的评论 - 你应该添加更多的细节问题,并用java标记它,如果这是正确的 – CupawnTae

回答

2

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

private Demo() {...} 

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

protected Demo(String param) {...} 

,那么你可能会做

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

和/或

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

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