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.
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.
For an instance of the subclass to be created, its constructor must be invoked.
And the first thing a constructor must do is to call one of its parent class constructor (the compiler inserts a call to super()
for you if you don't explicitely add it).
If all the parent class constructors are private, the subclass can't call any of them, making the parent class effectively final, i.e. impossible to subclass.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With