以防止实例化为主要目标的 class 抽象的副作用?

Side effects of making a class abstract with the primary goal to prevent it from being instantiated?

我知道方法是将构造函数设为私有, 但是为什么我们要通过使方法抽象来实现,我的问题是它的副作用是什么?

免责声明:这个问题发生了很大的变化,因此我认为我的回答不再能真正回答它了。遗憾的是我无法回答这个新问题,因为在评论中的进一步讨论中很明显似乎有些混乱。


将默认构造函数设为私有将使其他 classes 无法创建此 class 的对象。因为他们将如何访问构造函数?他们不能。但这并不意味着您不能创建此 class 的对象。与通过 getter 或 setter 函数访问私有变量的方式相同,您仍然可以创建此 class 的实例。您只需要在 class 内部进行,然后将它们分发到外部。

单例设计模式就是一个例子。在那里您生成一个实例,您可以通过 getter 函数访问它。


另一方面,抽象 class 根本不能用于创建对象。它们是应该包含通用数据结构和函数的模板。可以通过抽象函数强制实现函数。

我见过使用抽象 classes 的用法,他们定义静态工厂方法来创建 class 的默认实例,可以是 public 或私有子 class 该摘要 class。一个简单的例子是 java.awt.print.PrinterJob.

我多次使用上面的示例作为 Factory 和一种隐藏具体实现以防止客户端代码直接创建的方法。

上述示例的另一个原因是为了证明 class 不是直接创建的,而是通过其静态工厂方法创建的。