substitution principle
Code written for a superclass must keep working, every promise kept, with any subclass object.
A subtype must honor every contract of its supertype; a subclass that breaks one (a mutable Square changing its height) is not a valid substitute.
See also