Можешь привести пример использования принципа L в SOLID

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

Ответ

Принцип подстановки Лисков (Liskov Substitution Principle, LSP) гласит, что объекты базового класса должны заменяться объектами производных классов без изменения корректности программы.

Пример нарушения LSP:

open class Rectangle(val width: Int, val height: Int) {
    open fun area() = width * height
}

class Square(width: Int) : Rectangle(width, width) {
    override fun area() = super.area()
    // Нарушение LSP: квадрат не может изменять ширину/высоту независимо
}

Исправленный вариант:

interface Shape {
    fun area(): Int
}

class Rectangle(val width: Int, val height: Int) : Shape {
    override fun area() = width * height
}

class Square(val side: Int) : Shape {
    override fun area() = side * side
}

Теперь Rectangle и Square — независимые реализации Shape, и замена одной на другую не нарушит логику.