Inheritance Hierarchies - Cautions
1. All of the behaviors defined by abstractions at higher levels of a hierarchy
and not redefined at the lower levels of the hierarchy should be applicable to
objects defined by classes at lower level of a hierarchy.
2. Inheritance hierarchies are a very general abstraction. Each implementation
of inheritance hierarchy (eg. inheritance in Java) is a particular instance of the
hierarchy abstraction as defined here.