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.