静态工厂劣于构造函数

Ana*_*and 2 java constructor static-factory

我正在学习有效的Java。第一项为构造器上的静态工厂方法提供了令人信服的案例。

我没有第一个缺点是

仅提供静态工厂方法的主要缺点是没有公共或受保护的构造函数的类不能被子类化。

由于静态方法不能被继承,为什么我需要对具有静态工厂方法的类进行子类化?

有人可以解释一下。

ilu*_*uxa 5

假设您有一个名为Person:

class Person {
  public static Person createWithFirstName(String firstName) {
    return new Person(firstName, null, null);
  }
  // etc. - more factory methods

  // private constructor
  private Person(String firstName, String lastName, String nickname) { }

  // useful method
  public String getDisplayName() { }
}
Run Code Online (Sandbox Code Playgroud)

一切都很好,花花公子。但是现在您还需要一个名为的类Programmer,您突然意识到程序员也是人!

但是突然之间,你不能只是

class Programmer extends Person { }
Run Code Online (Sandbox Code Playgroud)

因为Person没有任何public构造函数。