Wie erreicht Go Polymorphismus ohne Vererbung?

DDD
Freigeben: 2024-11-06 06:45:02
Original
186 Leute haben es durchsucht

How does Go Achieve Polymorphism without Inheritance?

Polymorphismus in Go lang

Wie Sie festgestellt haben, unterstützt Go das traditionelle objektorientierte Konzept des Polymorphismus durch Vererbung nicht. Es gibt jedoch auch andere Möglichkeiten, mithilfe von Schnittstellen und Komposition ähnliche Ergebnisse zu erzielen.

Schnittstelle und Komposition

In Go definieren Schnittstellen Verträge, die die Methoden angeben, die ein Typ implementieren muss . Mit Composition können Sie neue Typen erstellen, indem Sie andere Typen einbetten. Durch die Kombination von Schnittstellen und Komposition können Sie eine Form von Polymorphismus erreichen.

Betrachten Sie beispielsweise den folgenden Code:

<code class="go">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()
}</code>
Nach dem Login kopieren

In diesem Beispiel:

  • Die Foo-Schnittstelle definiert eine printFoo-Methode.
  • FooImpl implementiert die Foo-Schnittstelle mit einer printFoo-Methode.
  • Bar bettet FooImpl ein und implementiert daher die Foo-Schnittstelle.
  • Bar2 bettet FooImpl ein und auch implementiert die Foo-Schnittstelle.
  • getFoo gibt einen Wert vom Typ Foo zurück. Da sowohl Bar als auch Bar2 die Foo-Schnittstelle implementieren, ist Bar2 ein gültiger Rückgabewert für getFoo.
  • main ruft getFoo auf, um einen Foo-Wert zu erhalten, und ruft dann die printFoo-Methode für diesen Wert auf.

Wenn Sie diesen Code ausführen, sehen Sie die folgende Ausgabe:

Hello, playground
Print Foo Impl
Nach dem Login kopieren

Dies zeigt, wie Schnittstellen und Komposition verwendet werden können, um eine Form von Polymorphismus in Go zu erreichen. Durch die Definition einer Schnittstelle können Sie sicherstellen, dass verschiedene Typen einen gemeinsamen Satz von Methoden nutzen. Durch das Einbetten von Typen können Sie neue Typen erstellen, die die Funktionen mehrerer anderer Typen kombinieren. Dadurch können Sie Code schreiben, der verschiedene Typen einheitlich behandelt.

Das obige ist der detaillierte Inhalt vonWie erreicht Go Polymorphismus ohne Vererbung?. 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
Beliebte Tutorials
Mehr>
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!