Java中的构造函数可以是私有的吗?

Posted

技术标签:

【中文标题】Java中的构造函数可以是私有的吗?【英文标题】:Can a constructor be private in Java [duplicate] 【发布时间】:2011-08-16 11:01:53 【问题描述】:

可能的重复:Question about constructors in JavaCan a constructor in Java be private?

Java 中的构造函数可以是私有的吗?我们在什么样的情况下使用它?

【问题讨论】:

您应该阅读以下内容:Question about constructors in Java。这个话题也在这里讨论。 【参考方案1】:

是的。您可能会使用它来实现工厂模式。

【讨论】:

Singleton 和 Abstract 也将从中受益。 单例是的,但抽象可能需要一个受保护的构造函数(当然可以调用私有构造函数)。【参考方案2】:

是的,constructors can be private 在 Java 和其他语言中。singleton pattern 以使用私有构造函数而闻名。

第一篇链接文章中的其他示例:

类型安全枚举 常量类 工厂方法

如果您想控制对象的实例化方式(如果有的话),您可以使用私有构造函数。例如,在 C# 中,您可以显式定义一个静态类并强制该类仅包含静态成员和常量。您不能在 Java 中显式地执行此操作,但您可以使用私有构造函数来防止实例化,然后在类中仅定义静态成员并基本上具有静态类。

常量类就是一个例子,但你也可以在可能包含实用函数(例如基本数学运算)的类中使用它,拥有一个实例没有意义,因为它只包含常量(如pi 和 e) 和静态数学方法。

【讨论】:

【参考方案3】:

构造函数可以是私有的。这最常用于单例模式,或者如果您只想通过静态工厂方法访问对象。

例子

Class MyClass 

 private MyClass()
 
  //private
 

 public static MyClass newInstance()
 
  return new MyClass()
 
 

【讨论】:

什么单例返回多个实例? "或者如果你只想通过静态工厂方法访问一个对象。"该部分提到了代码【参考方案4】:

如果你将所有的构造函数都设为私有,你就不可能子类化你的类:

public class NoChildren

   private static final NoChildren instance = new NoChildren();

   private NoChildren() 

   public static NoChildren getInstance()  return instance; 
    // Add more and try to subclass it to see.

【讨论】:

为什么这被否决了?这是完全正确的,它超越了单例模式。

以上是关于Java中的构造函数可以是私有的吗?的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 中的私有构造函数

抽象类中的私有构造函数

php子类的构造函数能继承父类的吗?

Java中私有构造函数有啥用?

java java中的单元测试私有构造函数

带参数的Java私有构造函数[重复]