Подтипы должны быть подставляемы вместо базового типа без нарушения корректности программы. Поведение подкласса не должно противоречить контракту базового класса.
Пример нарушения: Rectangle и Square. Если Square переопределяет setWidth/setHeight так, что меняет и другую сторону - код, ожидающий Rectangle (независимые стороны), сломается при подстановке Square.
Следствие: подкласс не должен ужесточать предусловия или ослаблять постусловия.