Heim > Backend-Entwicklung > Golang > Wie erreicht Go das Überschreiben von Methoden ohne traditionelle Vererbung?

Wie erreicht Go das Überschreiben von Methoden ohne traditionelle Vererbung?

Mary-Kate Olsen
Freigeben: 2024-11-16 00:55:03
Original
710 Leute haben es durchsucht

How does Go achieve method overriding without traditional inheritance?

Golang-Methodenüberschreibung

In Go wird das Konzept der Methodenüberschreibung durch Schnittstellen und nicht durch Vererbung wie in Java erreicht. Schnittstellen definieren einen Methodenvertrag, ohne deren Implementierung anzugeben.

Methodenüberschreibung in Go implementieren:

Schnittstellen verwenden:

  1. Definieren Sie eine Schnittstelle mit der Methodensignatur, die Sie überschreiben möchten.
  2. Definieren Sie einen Typ, der die Schnittstelle implementiert und die überschreibende Implementierung bereitstellt.
  3. Verwenden Sie im Originaltyp den Schnittstellentyp als ein Parameter für die Methode, die überschrieben werden soll.

Beispiel:

// Interface for Get() method
type Getter interface {
    Get() string
}

// Base type with original implementation
type Base struct{}

func (base *Base) Get() string {
    return "base"
}

// Custom type with overriding implementation
type Sub struct {
    Base
}

func (sub *Sub) Get() string {
    return "Sub"
}
Nach dem Login kopieren

Vorteil:

  • Behält das bestehende Verhalten von Base bei und bietet gleichzeitig die Möglichkeit, die Get()-Methode zu überschreiben.

Alternativer Ansatz mit Komposition:

  1. Definieren eine Struktur, die den ursprünglichen Typ einbettet und die überschreibende Implementierung enthält.
  2. Verwenden Sie den eingebetteten Typ, um auf die ursprüngliche Funktionalität zuzugreifen.

Beispiel:

// Sub type with composition
type Sub struct {
    Base
    custom string
}

func (sub *Sub) Get() string {
    // Access the original method via embedded Base
    if sub.custom == "" {
        return sub.Base.Get()
    }
    return sub.custom
}
Nach dem Login kopieren

Vorteil:

  • Behält eine einzelne Typdefinition bei, ohne dass zusätzliche Schnittstellentypen erforderlich sind.

Hinweis:

  • Beachten Sie, dass die Verwendung dieses Ansatzes möglicherweise vorhandenen Code beschädigt, der das Verhalten des ursprünglichen Typs annimmt.
  • Gos Schwerpunkt auf Komposition und Ententypisierung bevorzugt die Verwendung von Schnittstellen zum Überschreiben von Methoden und nicht traditionelles vererbungsbasiertes Überschreiben.

Das obige ist der detaillierte Inhalt vonWie erreicht Go das Überschreiben von Methoden ohne traditionelle 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage