 Some of these commonly occurring problems have implications and solutions particular to object-oriented development.It is intuitive to assume that inheritance creates a semantic "is a" relationship, and thus to infer that objects instantiated from subclasses can always be "safely" used instead of those instantiated from the superclass.This intuition is unfortunately false in most OOP languages, in particular in all those that allow mutable objects.