2010-12-20 15 views
3

私はコンストラクタがパラメータをとるファーストクラスを持っています。プライベートコンストラクタと継承(Java)

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

私はこの最初のクラスを拡張する2番目のクラスを持っています。

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

私がしたいことは、このクラス(例えば、Singletonパターンを使用して)のインスタンスを1つだけインスタンス化する可能性を持っているために民間Secondクラスのコンストラクタを維持することですが、コンパイラにはありません私はそれを可能にします。

コンストラクタをここで非公開に設定できない場合は、そのクラスのインスタンスを1つだけ作成できるようにするにはどうすればよいですか?

+1

コンパイラは、あなたがすることはできません正確には何?単にSecond(Object o)を非公開にするとうまくいくはずです。 – Avi

答えて

8

Secondのコンストラクタを問題なくプライベートにすることができます。ネストされたクラスを使用しない限り、Firstのコンストラクタをprivateにすることはできません。一例として、

、これは正常に動作します:

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

ここでは、働いています!

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