2010-12-20 131 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; 
    } 
}