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中的构造函数可以是私有的吗?的主要内容,如果未能解决你的问题,请参考以下文章