Methodenüberladung und Subtypisierung in Go-Strukturen
Betrachten Sie den folgenden Go-Code:
package main import "fmt" type Human struct { name string age int phone string } type Employee struct { Human // Embedding company string } func (h *Human) SayHi() { fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone) } func (e *Employee) SayHi() { fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name, e.company, e.phone) } func main() { sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"} sam.SayHi() }
Dieser Code demonstriert die Methode Überladung, wobei die SayHi-Methode sowohl in der Human- als auch in der Employee-Struktur definiert ist. Wenn eine Methode für eine Variable vom Typ „Employee“ aufgerufen wird, wird die Methode in der Employee-Struktur aufgerufen.
Zugriff auf Basisstrukturmethoden
Man fragt sich vielleicht, ob das möglich ist um die in der Human-Struktur definierte SayHi-Methode für eine Employee-Instanz aufzurufen. In Go ist der Zugriff auf die Methoden der Basisstruktur unkompliziert. Verweisen Sie dazu auf den eingebetteten Typ mithilfe des Namens des Strukturmitglieds, wie unten gezeigt:
sam := Employee{Human{"Sam", 45, "111-888-XXXX"}, "Golang Inc"} sam.SayHi() // Calls Employee.SayHi sam.Human.SayHi() // Calls Human.SayHi
Dieser Code zeigt, dass der Zugriff auf die Methode der eingebetteten Struktur nahtlos erfolgen kann. Die Ausgabe wäre:
Hi, I am Sam, I work at Golang Inc. Call me on 111-888-XXXX Hi, I am Sam you can call me on 111-888-XXXX
Das obige ist der detaillierte Inhalt vonKann ich bei der Untertypisierung auf Basisstrukturmethoden in Go zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!