溫馨提示×

Go語言接口怎樣實現(xiàn)多態(tài)

小樊
81
2024-11-02 09:55:00
欄目: 編程語言

在Go語言中,接口實現(xiàn)多態(tài)的關(guān)鍵在于定義一個接口,然后為這個接口提供多個實現(xiàn)。接口是一種抽象類型,它定義了一組方法,但不提供具體的實現(xiàn)。任何實現(xiàn)了這些方法的類型都可以被認為實現(xiàn)了該接口。這樣,我們可以通過接口類型來調(diào)用不同的實現(xiàn),從而實現(xiàn)多態(tài)。

下面是一個簡單的示例,展示了如何使用接口實現(xiàn)多態(tài):

package main

import (
	"fmt"
)

// 定義一個接口
type Shape interface {
	Area() float64
}

// 定義一個矩形結(jié)構(gòu)體
type Rectangle struct {
	Width  float64
	Height float64
}

// 為矩形結(jié)構(gòu)體實現(xiàn)Shape接口的Area方法
func (r Rectangle) Area() float64 {
	return r.Width * r.Height
}

// 定義一個圓形結(jié)構(gòu)體
type Circle struct {
	Radius float64
}

// 為圓形結(jié)構(gòu)體實現(xiàn)Shape接口的Area方法
func (c Circle) Area() float64 {
	return 3.14 * c.Radius * c.Radius
}

// 計算形狀的集合的面積
func CalculateTotalArea(shapes []Shape) float64 {
	totalArea := 0.0
	for _, shape := range shapes {
		totalArea += shape.Area()
	}
	return totalArea
}

func main() {
	shapes := []Shape{
		Rectangle{Width: 10, Height: 5},
		Circle{Radius: 3},
	}

	totalArea := CalculateTotalArea(shapes)
	fmt.Println("Total area:", totalArea)
}

在這個示例中,我們定義了一個名為Shape的接口,它包含一個名為Area的方法。然后,我們定義了兩個結(jié)構(gòu)體:RectangleCircle,并為它們分別實現(xiàn)了Area方法。這樣,RectangleCircle都實現(xiàn)了Shape接口,可以實現(xiàn)多態(tài)。

CalculateTotalArea函數(shù)中,我們接受一個Shape類型的切片,并遍歷它,調(diào)用每個形狀的Area方法來計算總面積。這里,我們可以使用Shape接口類型作為參數(shù),這樣就可以傳入任何實現(xiàn)了Shape接口的類型,從而實現(xiàn)多態(tài)。

0