Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erreicht Go Polymorphismus ohne traditionelle Vererbung?

Wie erreicht Go Polymorphismus ohne traditionelle Vererbung?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 19:12:02185Durchsuche

How Does Go Achieve Polymorphism Without Traditional Inheritance?

Polymorphismus in Go Lang: Erforschung objektorientierter Konzepte

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!

Stellungnahme:
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