Designing for subclassing

To create an extendable class: Consider using an "interface + default implementation" pair. This will allow users to choose the desired style of inheritance:

See Also :
Use final liberally
Serialization and subclassing
Avoid clone
Overridable methods need special care
Remember styles of inheritance
Constructors shouldn't call overridables