Некоторые ключевые ограничения при применении принципа Liskov Substitution (принцип подстановки Лисков) в проектировании иерархий классов:
- Предусловия не могут быть усилены в подклассе. 14 Подклассы не должны создавать больше предусловий, чем это определено в базовом классе, для выполнения некоторого поведения. 5
- Постусловия не могут быть ослаблены в подклассе. 14 Допустимо, если метод возвращает урезанный набор значений, так как этот набор всё равно укладывается в требования интерфейса. 4 А вот расширять возврат нельзя, так как появляются значения, которые не были предусмотрены интерфейсом. 4
- Исторические ограничения («правило истории»). 12 Подкласс не должен создавать новых мутаторов свойств базового класса. 12 Если базовый класс не предусматривал методов для изменения определённых в нём свойств, подтип этого класса также не должен создавать таких методов. 12
- Методы подкласса не могут генерировать никаких дополнительных исключений, кроме тех, которые сами являются подклассами исключений, генерируемых методами надкласса. 12
Нарушение принципа подстановки Лисков может вызвать множество проблем, например изменение поведения методов в подклассах, что приводит к неожиданным результатам в коде. 3