java - 如何扩展 Singleton 类

标签 java class inheritance singleton

如何扩展 Singleton 类? 我收到错误: 隐式 super 构造函数 Demo() 不可见。必须显式调用另一个构造函数。

package demo;

public class Demo {

 private static Demo instance;

 private Demo(){}

 public static Demo getInstance(){
    if(instance ==null){
        instance=new Demo();
    }
    return instance;
 }
}

最佳答案

这并不严格意味着它是一个单例,但默认情况下,当你扩展一个类时,Java 将在构造子类时调用父类的无参数构造函数。通常为了阻止人们创建单例类的随机实例,单例的无参数构造函数将被设为私有(private),例如<​​/p>

private Demo() {...}

如果您的 Demo 类没有子类可见的无参数构造函数,您需要告诉 Java 要调用哪个父类(super class)构造函数。例如。如果你有

protected Demo(String param) {...}

那么你可能会这样做

protected SubDemo() {
    super("something");
...
}

和/或

SubDemo(String param) {...}
{
    super(param);
}

请注意,如果您的 Demo 类没有非私有(private)构造函数,您将无法有效地扩展它,并且(如果可能)您需要将 Demo 类中至少一个构造函数的保护级别更改为您的子类可以访问的东西,例如 protected

关于java - 如何扩展 Singleton 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23577991/

相关文章:

php - 优化 MySQL 查询以获得正确的页面模板

java - 我应该在这个 JPQL 查询中包含 distinct 吗?

java - 为什么 LinkedList.removeFirst() = LinkedList.pop()?

java - 如何设置 PsiFileNode 或其子节点的背景颜色

c# - 如何在不创建实例的情况下访问在另一个类中声明的类?

java - 重写 toString() 以表示对象的字符串的原因和好处是什么?

c++ - 覆盖子类中的返回类型

javascript - 找不到有效的 JavaScript 继承模式

java - 在 Java 中缩短数组

c++ - 类声明后编译错误,Main 没有 "see"类