LSP говорит: "Производные типы не должны изменять поведение базовых типов", другими словами "Производные типы должны быть полностью заменены для базовых типов".
Это означает, что если мы определяем виртуальные методы в наших базовых классах, мы нарушаем этот принцип.
Также, если мы спрячем метод в методе диска с помощью нового ключевого слова, мы снова нарушили этот принцип.
Другими словами, если мы используем полиморфизм, мы нарушили LSP!
Во многих приложениях я использовал виртуальные методы в базовых классах, и теперь я понимаю, что это нарушает LSP. Также, если вы используете шаблон шаблона, вы нарушили этот принцип, который я использовал его много.
Итак, как разработать приложение, которое соответствует этому принципу, когда вам нужно наследование, и вы также хотите воспользоваться полиморфизмом? Я в замешательстве!
См. пример отсюда: http://www.oodesign.com/liskov-s-substitution-principle.html