Golang implementiert Polymorphismus

WBOY
Freigeben: 2023-05-06 10:29:06
Original
1600 Leute haben es durchsucht

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() }
Nach dem Login kopieren

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() }
Nach dem Login kopieren

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() }
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!