Что такое liskov-substitution-principle?
Используйте при создании подклассов или реализации интерфейсов. Используйте, когда возникает желание переопределить методы с исключениями или пустыми операциями. Используйте, когда иерархия наследования кажется неправильной. Источник: yanko-belov/code-craft.