Golang ist eine Programmiersprache, die objektorientierte Programmierung unterstützt. Obwohl es in herkömmlichen objektorientierten Programmiersprachen keine Konzepte wie Klassen, Vererbung und Polymorphismus gibt, gibt es in Golang viele Methoden, um Polymorphismus zu erreichen. In diesem Artikel wird erläutert, wie Polymorphismus in Golang implementiert wird.
1. Schnittstelle
In Golang ist die Schnittstelle eine Möglichkeit, Polymorphismus zu erreichen. Eine Schnittstelle ist eine Sammlung von Methoden. Ein Typ implementiert die Schnittstelle, solange er alle Methoden in der Schnittstelle implementiert. Diese Methode ist flexibler und weniger an den Code gekoppelt als die herkömmliche Vererbungsmethode.
Das Folgende ist ein Beispiel für die Implementierung einer Schnittstelle:
type Animal interface { Move() Speak() } type Dog struct { Name string } func (d Dog) Move() { fmt.Printf("%s is moving\n", d.Name) } func (d Dog) Speak() { fmt.Printf("%s is speaking\n", d.Name) } func main() { var a Animal a = Dog{Name: "Tom"} a.Move() a.Speak() }
Im obigen Code ist eine Schnittstelle Animal definiert, die zwei Methoden Move und Speak enthält. Anschließend wird eine Struktur Dog definiert, die zwei Methoden in der Animal-Schnittstelle implementiert. In der Hauptfunktion wird eine Variable a vom Typ „Animal“ definiert und einer Instanz vom Typ „Hund“ zugewiesen. Rufen Sie dann die Move- und Speak-Methoden von a auf. Da Dog die Animal-Schnittstelle implementiert, kann sie direkt aufgerufen werden.
Hier ist zu beachten, dass die Schnittstelle in Golang implizit implementiert wird, dh solange der Typ alle Methoden in der Schnittstelle implementiert, wird die Schnittstelle automatisch ohne explizite Deklaration implementiert.
2. Strukturverschachtelung
Strukturverschachtelung ist auch eine Möglichkeit, Polymorphismus zu erreichen. Durch die Verschachtelung eines Typs innerhalb eines anderen Typs können Sie die Methoden des verschachtelten Typs verbinden und eine gemeinsame Schnittstellenmethode im äußeren Typ definieren und so Polymorphismus erreichen.
Das Folgende ist ein Beispiel für die Verschachtelung von Strukturen:
type Animal struct { Name string } func (a Animal) Move() { fmt.Printf("%s is moving\n", a.Name) } type Dog struct { Animal } func (d Dog) Speak() { fmt.Printf("%s is speaking\n", d.Name) } type Cat struct { Animal } func (c Cat) Speak() { fmt.Printf("%s is speaking\n", c.Name) } type Moveable interface { Move() } type Speakable interface { Speak() } func main() { var m Moveable var s Speakable m = Dog{Animal{Name: "Tom"}} s = Cat{Animal{Name: "Kitty"}} m.Move() s.Speak() }
Im obigen Code wird eine Tierstruktur definiert, und dann werden die Strukturen Hund und Katze definiert Alle sind in der Animal-Struktur verschachtelt und implementieren ihre eigenen Methoden. Dann werden eine Moveable-Schnittstelle und eine Speakable-Schnittstelle definiert, und die Variablen m und s, die diese beiden Schnittstellen enthalten, werden in der Hauptfunktion deklariert und Instanzen der Typen Dog und Cat zugewiesen. Rufen Sie dann die Move-Methode von m bzw. die Speak-Methode von s auf, um die entsprechenden Informationen auszugeben.
Durch Strukturverschachtelung können wir einen gemeinsamen Schnittstellentyp implementieren, um Polymorphismus zu erreichen. Es ist zu beachten, dass verschachtelte Strukturen keine Methoden oder Felder mit demselben Namen haben dürfen, da es sonst zu Konflikten kommt.
3. Switch-Anweisung
Zusätzlich zur Schnittstellen- und Strukturverschachtelung kann die Switch-Anweisung auch verwendet werden, um Polymorphismus in Golang zu erreichen.
Das Folgende ist ein Beispiel für die Verwendung der Switch-Anweisung zum Erreichen von Polymorphismus:
type Animal struct { Name string Type string } func (a Animal) Move() { fmt.Printf("%s is moving\n", a.Name) } func (a Animal) Speak() { switch a.Type { case "dog": fmt.Printf("%s is barking\n", a.Name) case "cat": fmt.Printf("%s is meowing\n", a.Name) } } func main() { d := Animal{Name: "Tom", Type: "dog"} c := Animal{Name: "Kitty", Type: "cat"} d.Move() d.Speak() c.Move() c.Speak() }
Im obigen Code ist eine Animal-Struktur definiert und in der Struktur Move- und Speak-Methoden . Die Switch-Anweisung wird in der Speak-Methode verwendet, um je nach dem Type-Attribut von Animal unterschiedliche Informationen auszugeben. In der Hauptfunktion werden eine Animal-Instanz vom Typ Hund und eine Animal-Instanz vom Typ Katze definiert und deren Move- und Speak-Methoden aufgerufen. Da die von der Speak-Methode ausgegebenen Informationen je nach Type-Attribut unterschiedlich sind, wird Polymorphismus implementiert.
Es ist zu beachten, dass bei Verwendung der Switch-Anweisung zur Implementierung von Polymorphismus diese anhand des Typs beurteilt und entsprechend ausgegeben werden muss. Bei mehreren Typen kann die Komplexität des Codes höher sein.
Zusammenfassung:
In diesem Artikel werden drei Möglichkeiten zur Implementierung von Polymorphismus in Golang vorgestellt: Schnittstelle, Strukturverschachtelung und Switch-Anweisung. Verschiedene Methoden haben ihre eigenen Vorteile und anwendbaren Szenarien. Entwickler können die geeignete Methode zur Implementierung von Polymorphismus entsprechend den spezifischen Anforderungen auswählen.
Das obige ist der detaillierte Inhalt vonGolang implementiert Polymorphismus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!