🟡 Средний · 2 очк. Структуры и методы
Что произойдет, если внешняя структура определяет метод с тем же именем, что и встроенная?
A Ошибка компиляции
B Метод внешней структуры затеняет (shadows) метод встроенной; для вызова встроенного нужно обратиться к нему явно через имя встроенного типа
C Метод встроенной структуры имеет приоритет
D Вызовутся оба метода последовательно
Объяснение вопроса

При конфликте имен метод внешней структуры затеняет метод встроенной:

type Base struct{}
func (b Base) String() string { return "base" }

type Extended struct {
    Base
}
func (e Extended) String() string { return "extended" }

e := Extended{}
fmt.Println(e.String())      // "extended" - метод Extended
fmt.Println(e.Base.String())  // "base" - явный вызов Base

Правила приоритета:

  • Собственные методы и поля внешней структуры имеют наивысший приоритет
  • При нескольких встроенных типах с одинаковым методом - ошибка компиляции (ambiguous selector), если не разрешить явно
  • Затенение работает и для полей: поле внешней структуры скрывает одноименное поле встроенной

Это используется для "переопределения" поведения: например, встроить тип с реализацией интерфейса и переопределить один метод.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.