Implementierung des Polymorphismus von Golang-Funktionen in der objektorientierten Programmierung

PHPz
Freigeben: 2024-05-04 16:03:02
Original
797 Leute haben es durchsucht

In der Go-Sprache können Funktionen als Schnittstellenwerte gespeichert werden, wodurch Polymorphismus erreicht wird: Definieren Sie eine Schnittstelle und geben Sie einen Satz von Methodensignaturen an. Erstellen Sie einen Typ, der die Schnittstelle implementiert und diese Methoden dafür implementiert. Definieren Sie eine Funktion, die Schnittstellenwerte als Eingabe akzeptiert. Methoden, die unabhängig vom tatsächlichen Typ nur den Schnittstellenwert in der Funktion verwenden. Rufen Sie Funktionen mit Werten unterschiedlichen Typs auf, um Polymorphismus zu erreichen.

Implementierung des Polymorphismus von Golang-Funktionen in der objektorientierten Programmierung

Implementierung des Polymorphismus von Go-Sprachfunktionen in der objektorientierten Programmierung

In der Go-Sprache können Funktionen als Schnittstellenwerte gespeichert werden, wodurch wir Polymorphismus erreichen können, obwohl die Go-Sprache selbst nicht objektorientiert ist.

Schnittstelle

Eine Schnittstelle definiert die Signaturen einer Reihe von Methoden, die von Typen implementiert werden müssen, die die Schnittstelle implementieren. Zum Beispiel definieren wir eine Shape-Schnittstelle: Shape 接口:

type Shape interface {
    Area() float64
}
Nach dem Login kopieren

类型实现接口

我们可以创建实现 Shape 接口的类型,如下所示:

type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

type Circle struct {
    radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.radius * c.radius
}
Nach dem Login kopieren

使用函数作为接口值

现在,我们创建了一个 Shape 接口,我们可以使用函数作为其值。为此,我们定义一个 calculateArea 函数,它接受一个 Shape 接口值作为输入。

func calculateArea(s Shape) float64 {
    return s.Area()
}
Nach dem Login kopieren

实战案例

现在,让我们创建一个实例来演示多态性是如何实现的。

func main() {
    // 创建一个 Rectangle 和一个 Circle
    r := Rectangle{width: 2, height: 3}
    c := Circle{radius: 5}

    // 使用函数计算他们的面积
    areaR := calculateArea(r)
    areaC := calculateArea(c)

    fmt.Println("Rectangle area:", areaR)
    fmt.Println("Circle area:", areaC)
}
Nach dem Login kopieren

输出:

Rectangle area: 6
Circle area: 78.53981633974483
Nach dem Login kopieren

在这个例子中,calculateArea 函数只使用传入的 Shape 接口的 Area 方法,无论实际类型是 Rectangle 还是 Circlerrreee

Typ implementiert die Schnittstelle 🎜🎜 Wir können einen Typ erstellen, der die Shape-Schnittstelle wie folgt implementiert: 🎜rrreee🎜Verwenden Sie Funktionen als Schnittstellenwerte🎜🎜Da wir nun eine Shape-Schnittstelle erstellt haben, können wir Funktionen als Werte verwenden. Dazu definieren wir eine calculateArea-Funktion, die einen Shape-Schnittstellenwert als Eingabe akzeptiert. 🎜rrreee🎜Praktischer Fall🎜🎜Lassen Sie uns nun ein Beispiel erstellen, um zu demonstrieren, wie Polymorphismus implementiert wird. 🎜rrreee🎜Ausgabe: 🎜rrreee🎜In diesem Beispiel verwendet die Funktion calculateArea nur die Methode Area der übergebenen Schnittstelle Shape, unabhängig davon Der tatsächliche Typ ist Rectangle oder Circle. Dies ist die Verkörperung des Polymorphismus. 🎜

Das obige ist der detaillierte Inhalt vonImplementierung des Polymorphismus von Golang-Funktionen in der objektorientierten Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
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!