Liskov substitution principle

In OOP terms, the Liskov Substitution Principle says that objects of the same type or subtype should be substituted and can be replaced by the other, without affecting the caller. In other words, when we implement an interface, our class should implement all the methods defined in the interface and satisfy all interface requirements. And in even fewer words, satisfy interface contracts.

The compiler will enforce that our methods have the correct signatures. The LSP goes a bit further and demands that our implementation should also have the same invariant, postconditions, and other properties stated or implied by the documentation of the superclass or interface.