Ответ
L — Liskov Substitution Principle (Принцип подстановки Барбары Лисков).
Суть: объекты базового класса должны быть заменяемы объектами производных классов без изменения корректности программы.
Пример нарушения:
open class Rectangle(val width: Int, val height: Int) {
open fun area() = width * height
}
class Square(side: Int) : Rectangle(side, side) {
override fun area() = super.area() // Нарушение: квадрат — частный случай, но не заменяет прямоугольник полностью
}
Проблема: если клиентский код ожидает изменяемость ширины/высоты у Rectangle, подстановка Square сломает логику.
Решение: избегать наследования, если поведение несовместимо, или проектировать иерархию корректно.