Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erklärung, wie Golang einen Vererbungseffekt erzielt

Detaillierte Erklärung, wie Golang einen Vererbungseffekt erzielt

PHPz
PHPzOriginal
2023-04-11 10:39:25780Durchsuche

In der Go-Sprache gibt es kein Klassenkonzept, daher gibt es in traditionellen objektorientierten Sprachen keine Vererbung. Allerdings kann in der Go-Sprache durch die Kombination von Strukturen und anonymen Feldern ein vererbungsähnlicher Effekt erzielt werden.

Werfen wir zunächst einen Blick auf die Verwendung von Kombinationen in der Go-Sprache. Unter Komposition versteht man die Einbettung einer Struktur in eine andere Struktur, um die Wiederverwendung und Modularisierung von Code zu erreichen. Beispielsweise können wir eine Personenstruktur definieren:

type Person struct {
    Name string
    Age int
}

Anschließend können wir die Personenstruktur in die Student-Struktur einbetten:

type Student struct {
    Person
    School string
}

Auf diese Weise verfügt die Student-Struktur nicht nur über eigene Attribute, sondern kann auch das Person-Attribut übergeben um auf Eigenschaften in der übergeordneten Klasse zuzugreifen. Zum Beispiel:

s := Student{
    Person: Person{Name: "Tom", Age: 18},
    School: "CMS",
}
fmt.Println(s.Name) // Tom
fmt.Println(s.Age)  // 18

Sie können auch über das eingebettete Person-Attribut auf Methoden in der übergeordneten Klasse zugreifen:

func (p *Person) SayHello() {
    fmt.Printf("Hello, my name is %s.\n", p.Name)
}

type Student struct {
    Person
    School string
}

func main() {
    s := Student{
        Person: Person{Name: "Tom", Age: 18},
        School: "CMS",
    }
    s.SayHello() // Hello, my name is Tom.
}

Was aber, wenn wir in der Student-Struktur eine Methode mit demselben Namen wie die Person-Struktur definieren möchten? Zu diesem Zeitpunkt müssen Sie die Eigenschaften anonymer Felder verwenden.

Anonymes Feld ist ein spezieller Feldtyp, der keinen Namen, sondern nur einen Typ angibt. Über anonyme Felder können Variablen und Methoden mit demselben Namen in der übergeordneten Klasse in der Unterklasse referenziert werden. Wir können die folgende Methode verwenden, um eine Methode mit demselben Namen wie die Personenstruktur in der Student-Struktur zu definieren:

type Person struct {
    Name string
    Age int
}

func (p *Person) SayHello() {
    fmt.Printf("Hello, my name is %s.\n", p.Name)
}

type Student struct {
    Person
    School string
}

func (s *Student) SayHello() {
    fmt.Printf("Hello, my name is %s and I am a student of %s.\n", s.Name, s.School)
}

func main() {
    s := Student{
        Person: Person{Name: "Tom", Age: 18},
        School: "CMS",
    }
    s.SayHello() // Hello, my name is Tom and I am a student of CMS.
}

Im obigen Code definieren wir die SayHello-Methode mit demselben Namen wie die Personenstruktur in der Student-Struktur und Übergeben Sie s.Name und s.School, um auf die Eigenschaften in der übergeordneten Klasse zuzugreifen.

Zusammenfassend lässt sich sagen, dass die Go-Sprache nicht über das Konzept der Vererbung verfügt, aber durch die Kombination von Strukturen und anonymen Feldern können ähnliche Effekte wie bei der Vererbung erzielt werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung, wie Golang einen Vererbungseffekt erzielt. 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