2010-12-20 6 views
3

J'ai une première classe pour laquelle le constructeur prend un paramètre.Constructeur privé et héritage (Java)

public class First { 
    First(Object o){ 
     o.toString(); 
    } 
} 

J'ai une deuxième classe qui prolonge cette première.

public class Second extends First { 
    Second(Object o) { 
     super(o); 
    } 
} 

Ce que je veux est de garder le constructeur de Second classe privée afin d'avoir une possibilité d'instancier la seule instance de cette classe (en utilisant modèle Singleton, par exemple), mais compilateur ne pas permettez-moi de faire cela.

Si je ne peux pas définir le constructeur comme privé ici, que puis-je faire pour permettre la création de la seule instance de la classe?

+1

Que signifie exactement pas le compilateur vous permettent de le faire? Il suffit de faire en sorte que Second (Object o) private fonctionne correctement. – Avi

Répondre

8

Vous pouvez rendre le constructeur de Second privé sans problème. Ce que vous ne pouvez pas faire est de rendre le constructeur de First privé, sauf si vous utilisez des classes imbriquées.

À titre d'exemple, cela fonctionne très bien:

class First { 
    First(Object o) { 
     o.toString(); 
    } 
} 

class Second extends First { 
    private final static Second instance = new Second(new Object()); 

    private Second(Object o) { 
     super(o); 
    } 

    public static Second getInstance() { 
     return instance; 
    }  
} 
2

Ici, il travaille !!

class First { 
    First(Object o){ 
     o.toString(); 
    } 

    public First() {//I think you missed this 
    } 
} 
class Second extends First { 
    private static Second obj ; 
    private Second(Object o) { 
     super(o); 
    } 

    private Second() { 

    } 

    public static Second getInstance(){ 
     if(obj == null){ 
      obj = new Second(new Object()); 
     } 
     return obj; 
    } 


} 
public class SingleTon { 
    public static void main(String[] args) { 
     Second sObj = Second.getInstance(); 
    } 
} 
0
public class Second extends First{ 
    private static final Second instance = new Second(new Object()); 
    private Second(Object o) { 
    super(o); 
    } 
    public static Second instance(){ 
    return instance; 
    } 
}