Heim > Artikel > Backend-Entwicklung > Wie erreicht Go Polymorphismus ohne traditionelle Vererbung?
In Go, einer Programmiersprache, die für ihre Einfachheit und Parallelität bekannt ist, nimmt das Konzept des Polymorphismus eine einzigartige Form an. Polymorphismus, ein Grundbestandteil der objektorientierten Programmierung, ermöglicht die Behandlung von Objekten verschiedener Klassen als Objekte ihrer übergeordneten oder Schnittstellenklasse.
Stellen Sie sich das folgende Szenario in einer traditionellen objektorientierten Sprache vor:
type Foo { ... } type Bar : Foo { ... } func getFoo() Foo { return Bar{...} }
In einem solchen Szenario wird erwartet, dass getFoo() nahtlos eine Instanz der Bar-Klasse zurückgibt und dabei Polymorphismus nutzt. In Go führt dieser Ansatz jedoch zu einem Fehler, der betont, dass getFoo() eine Instanz der Foo-Klasse zurückgeben muss.
Gos Ansatz zum Polymorphismus unterscheidet sich geringfügig. Um die zuvor beschriebene Funktionalität zu replizieren, nutzt Go Schnittstellen und Zusammensetzung:
package main import "fmt" type Foo interface { printFoo() } type FooImpl struct { } type Bar struct { FooImpl } type Bar2 struct { FooImpl } func (f FooImpl)printFoo(){ fmt.Println("Print Foo Impl") } func getFoo() Foo { return Bar{} } func main() { fmt.Println("Hello, playground") b := getFoo() b.printFoo() }
Durch die Implementierung der Foo-Schnittstelle und die Erstellung der FooImpl-Struktur übernimmt der Bar-Typ die Verantwortlichkeiten der Foo-Schnittstelle. Folglich kann getFoo() eine Instanz des Bar-Typs zurückgeben, die sich an die Foo-Schnittstelle hält.
Durch diese Mechanismen stellt Go eine Form von Polymorphismus bereit, die sich zwar von der herkömmlichen objektorientierten Vererbung unterscheidet, aber Folgendes ermöglicht die dynamische Behandlung von Objekten anhand ihrer Schnittstellen.
Das obige ist der detaillierte Inhalt vonWie erreicht Go Polymorphismus ohne traditionelle Vererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!