有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个构造函数接受参数的第一个类

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

我有第二个类,它扩展了第一个类

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

我想让Second类的构造函数保持私有,以便能够实例化这个类的唯一一个实例(例如,使用单例模式),但编译器不允许我这样做

如果我不能在这里将构造函数设置为private,我该怎么做才能只允许创建类的一个实例


共 (3) 个答案

  1. # 1 楼答案

    它开始工作了

    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();
        }
    }
    
  2. # 2 楼答案

    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;
        }
    }
    
  3. # 3 楼答案

    您可以毫无问题地将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;
        }    
    }