Sobes.tech
Back to questions
Junior — Middle
67

Объясните различия между использованием наследования и композиции в объектно-ориентированном программировании.

Companies where asked
GrowFood

Answer from AI

sobes.tech AI

Наследование и композиция — два основных способа повторного использования кода в объектно-ориентированном программировании, но они имеют разные подходы и цели.

Наследование — это механизм, при котором один класс (подкласс) наследует свойства и методы другого класса (суперкласса). Это создает иерархию "является" (is-a). Например, класс Кошка наследует от класса Животное, значит кошка — это животное.

Композиция — это когда один объект содержит другой объект и использует его функциональность, то есть "имеет" (has-a) отношение. Например, класс Автомобиль может содержать объект Двигатель.

Основные различия:

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

Пример на Kotlin:

// Наследование
open class Animal {
    open fun sound() = "Some sound"
}

class Cat : Animal() {
    override fun sound() = "Meow"
}

// Композиция
class Engine {
    fun start() = "Engine started"
}

class Car(private val engine: Engine) {
    fun startCar() = engine.start()
}

В Android-разработке предпочтительнее использовать композицию, чтобы избежать жестких связей и повысить тестируемость кода.