私有构造函数和继承(Java)

4

我有一个一级类,其构造函数需要一个参数。

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

我有一个继承了这个第一个类的第二个类。

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

我想要的是将Second类的构造函数设为私有,以便使用单例模式等方式实例化该类的唯一一个实例,但是编译器不允许我这样做。
如果我不能在这里将构造函数设置为私有,我可以做什么来允许创建该类的唯一实例?

1
编译器到底不允许你做什么?将Second(Object o)设置为私有应该可以正常工作。 - Avi
3个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接