2014-05-10 4 views
-1

Comment étendre une classe Singleton? Je reçois une erreur: Super constructeur implicite Démo() n'est pas visible. Doit invoquer explicitement un autre constructeur.Comment étendre une classe Singleton

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? Qu'est-ce que prog lang –

+0

En plus du commentaire de @ AbdennourToumi, veuillez poster le code dans votre classe Demo() et le singleton original que vous essayez d'étendre pour nous aider à résoudre les problèmes. On dirait que vous avez un constructeur privé dans la classe singleton originale. –

+0

Le message d'erreur indique java, mais je suis d'accord avec les commentaires ci-dessus - vous devriez ajouter plus de détails à la question, et le marquer avec java si c'est correct – CupawnTae

Répondre

2

Ce n'est pas strictement à ce sujet d'être un singleton, mais par défaut lorsque vous étendez une classe, Java invoqueront constructeur sans arg parent lors de la construction de la sous-classe. Souvent, pour empêcher les gens de créer des instances aléatoires de la classe singleton, le constructeur sans-argument du singleton sera rendu privé, par ex.

private Demo() {...} 

Si votre classe de démonstration ne dispose pas d'un constructeur sans arg qui est visible à la sous-classe, vous devez indiquer Java quel constructeur superclasse appeler. Par exemple. si vous avez

protected Demo(String param) {...} 

alors vous pourriez faire

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

et/ou

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

Notez que si votre classe de démonstration n'a pas des constructeurs non-privé, vous ne serez pas en mesure pour l'étendre utilement, et (si possible) vous devez changer le niveau de protection d'au moins un constructeur de la classe Demo en quelque chose qui soit accessible à votre sous-classe, par exemple protected