The ability to factor out common properties of several classes and form them into a
superclass that can be shared with subclasses can greatly reduce redundancy within systems
and is regarded as one of the main advantages of object-orientation. Overriding is
an important feature of inheritance as it allows special cases to be handled easily with
minimal impact on the rest of the system.