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