javaconstructorstatic-factory

Static factory disadvantage over constructor


I am going through Effective Java. The very first item makes a convincing case for static factory methods over constructors.

I didn't get the first disadvantage which is

The main disadvantage of providing only static factory methods is that classes without public or protected constructors cannot be subclassed.

Why do i need to subclass the class having static factory method since static methods can't be inherited?

Can someone please explain.


Solution

  • Suppose you have a class called 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() { }
    }
    

    It's all good and dandy. But now you also need a class called Programmer, and you suddenly realize the programmers are persons too!

    But all of a sudden, you can't just

    class Programmer extends Person { }
    

    since Person doesn't have any public constructors.