Sobes.tech
Junior — Middle

Kinek a tulajdona a metódushívás, ha ugyanazon objektumon belül van egy beágyazott másik objektum ugyanazzal a metódussal?

sobes.tech MI

Válasz az MI-től

Go-ban, ha ugyanazon objektumon (struktúrán) belül van egy beágyazott (embedded) másik objektum ugyanazzal a névvel rendelkező módszerrel, akkor a külső objektumon keresztüli módszerhívás a külső objektum módszerére fog hivatkozni, ha az definiálva van. Ha a módszer nincs definiálva a külső objektumban, akkor a hívás az beágyazott objektumhoz lesz delegálva.

Példa:

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()      // Outer.Method hívás
    o.Inner.Method() // Inner.Method hívás
}

Ezért, ha a módszer a külső objektumban van definiálva, "felülírja" az ugyanazzal a névvel rendelkező beágyazott objektum módszerét. A o.Method() hívás a külső objektumhoz tartozik. Ha a módszer nincs jelen a külső objektumban, a hívás át lesz irányítva a beágyazott objektumhoz.