2010-12-20 13 views
3

Ich habe erste Klasse, für die Konstruktor einen Parameter übernimmt.Private Konstruktor und Vererbung (Java)

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

Ich habe eine zweite Klasse, die diese erste erweitert.

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

Was ich will, ist der Konstruktor von Second Klasse privat zu halten, um eine Möglichkeit zu haben, die nur eine Instanz dieser Klasse (unter Verwendung von Singleton-Muster, zum Beispiel) zu instanziieren, aber der Compiler nicht erlaube mir das zu tun.

Wenn ich den Konstruktor hier nicht als privat festlegen kann, was kann ich tun, damit die einzige Instanz der Klasse erstellt werden kann?

+1

Was genau macht nicht den Compiler können Sie tun? Einfach Second (Object o) privat zu machen sollte gut funktionieren. – Avi

Antwort

8

Sie können den Konstruktor von Second privat ohne Probleme machen. Was Sie nicht tun können, ist den Konstruktor First privat zu machen, es sei denn, Sie verwenden geschachtelte Klassen.

Als Beispiel das funktioniert gut:

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

Hier funktioniert !!

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; 
    } 
}