Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
package main
import "fmt"
type Animal struct{}
type Dog struct{ Animal }
func (a Animal) Kind() string { return "pet" }
func (a Animal) Say() string { return a.Kind() }
func (d Dog) Kind() string { return "dog" }
func main() { fmt.Println(Dog{}.Kind(), Dog{}.Say()) }dog pet
- Ждать
dog dog:Say— методAnimal, и егоa.Kind()вызываетAnimal.Kind; встраивание — не наследование, до методаDogдело не доходит. - Ждать
pet petили ошибку компиляции: собственныйKindуDogзатеняет продвинутый, поэтомуDog{}.Kind()вызывает его без конфликта.
- Как всё же добраться до встроенного поля после того, как его затенило собственное?
- Если два встроенных типа продвигают один и тот же метод, что произойдёт?