Classes are designed and documented for subclassing.
Subclasses cannot relax constraints
Subclasses can add constraints by overriding setter methods
Subclasses can add functionality or utility
Factories can be used to build in the subclasses during parsing