Sobes.tech
Junior — Middle

Cui aparține apelul metodei dacă în interiorul aceluiași obiect există un alt obiect încorporat cu aceeași metodă?

sobes.tech AI

Răspuns de la AI

În Go, dacă în interiorul aceluiași obiect (structură) există un alt obiect încorporat (embedded) cu o metodă cu același nume, apelul metodei prin obiectul extern va accesa metoda obiectului extern dacă aceasta este definită. Dacă metoda nu este definită în obiectul extern, apelul va fi delegat obiectului încorporat.

Exemplu:

package main
import "fmt"

type Inner struct{}
func (i Inner) Method() { fmt.Println("Inner Method") }

type Outer struct {
    Inner
}

func (o Outer) Method() { fmt.Println("Outer Method") }

func main() {
    o := Outer{}
    o.Method()      // Va apela Outer.Method
    o.Inner.Method() // Va apela Inner.Method
}

Prin urmare, dacă metoda este definită în obiectul extern, ea "suprascrie" metoda obiectului încorporat cu același nume. Apelul o.Method() aparține obiectului extern. Dacă metoda nu este prezentă în obiectul extern, apelul va fi redirecționat către obiectul încorporat.