Чем можно заменить наследование

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

Ответ

Композиция — лучшая альтернатива наследованию. Вместо расширения класса можно включать объекты других классов как поля. Это уменьшает связность и делает код гибче.

Пример:

class Engine { /*...*/ }

// Вместо наследования Car : Vehicle
class Car(private val engine: Engine) {
    fun start() = engine.start()
}

Другие подходы:

  • Интерфейсы (реализация через implements)
  • Делегирование (через by в Kotlin)
  • Паттерны (Стратегия, Декоратор)

Преимущества:

  • Избегаем хрупкости базового класса
  • Легче тестировать (можно мокировать зависимости)
  • Поддержка принципа SOLID (особенно D — Dependency Inversion)