Что такое L в SOLID

«Что такое L в SOLID» — вопрос из категории ООП, который задают на 31% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

LLiskov 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 сломает логику.

Решение: избегать наследования, если поведение несовместимо, или проектировать иерархию корректно.