2010-12-20 170 views
3

我有構造函數帶有參數的第一個類。私有構造函數和繼承(Java)

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

我有擴展了該第一個的第二類。

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

我要的是保持Second類私有的構造函數,以便有可能實例化這個類(使用Singleton模式,例如)的只有一個實例,但編譯器不允許我這樣做。

如果我不能在這裏設置構造函數爲private,我該怎麼做才能創建該類的唯一實例?

+1

究竟沒有編譯器允許你這樣做?簡單地把Second(Object o)私人應該很好。 – Avi 2010-12-20 13:18:35

回答

8

你可以使Second的構造函數私有,沒有問題。你不能做的是使First的構造函數爲私有的,除非你使用嵌套類。

舉個例子,這工作得很好:

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