В Go нет классического наследования, как в объектно-ориентированных языках. Вместо этого используется композиция и интерфейсы.
В Go нет наследования, как в Java. Как объяснить Java-джуну, каким образом в 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 поощряет композицию и интерфейсы вместо классического наследования, что упрощает архитектуру и повышает гибкость.