В Go нет наследования, как в Java. Как объяснить Java-джуну, каким образом в Go добиваются переиспользования кода?

В Go нет классического наследования, как в объектно-ориентированных языках. Вместо этого используется композиция и интерфейсы.

Короткий ответ

Что ответить на собеседовании

В Go нет классического наследования, как в объектно-ориентированных языках. Вместо этого используется композиция и интерфейсы.

Подробный разбор

Ответ с пояснениями

В Go нет классического наследования, как в объектно-ориентированных языках. Вместо этого используется композиция и интерфейсы.

Ключевые особенности:

  • Композиция через встраивание (embedding): Структура может включать другую структуру как поле без имени, что позволяет "унаследовать" методы вложенной структуры.
  • Интерфейсы: Позволяют описывать поведение, которое может быть реализовано разными типами без явного наследования.

Пример композиции:

type Animal struct {
    Name string
}

func (a Animal) Speak() string {
    return "..."
}

// Dog встраивает Animal

type Dog struct {
    Animal
}

func (d Dog) Speak() string {
    return "Woof!"
}

func main() {
    d := Dog{Animal{Name: "Buddy"}}
    fmt.Println(d.Name)      // доступ к полю Animal
    fmt.Println(d.Speak())   // переопределённый метод
}

Таким образом, Go поощряет композицию и интерфейсы вместо классического наследования, что упрощает архитектуру и повышает гибкость.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку