在Go語(yǔ)言中,接口多態(tài)是通過(guò)接口類型和實(shí)現(xiàn)了該接口的具體類型的組合來(lái)實(shí)現(xiàn)的。接口多態(tài)允許我們編寫(xiě)更加靈活和可擴(kuò)展的代碼,因?yàn)槲覀兛梢詫⒉煌膶?shí)現(xiàn)類型傳遞給相同的接口變量,而無(wú)需關(guān)心具體的實(shí)現(xiàn)細(xì)節(jié)。
要實(shí)現(xiàn)接口多態(tài),需要遵循以下步驟:
type Shape interface {
Area() float64
}
type Circle struct {
Radius float64
}
func (c Circle) Area() float64 {
return math.Pi * c.Radius * c.Radius
}
type Rectangle struct {
Width, Height float64
}
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
func PrintArea(s Shape) {
fmt.Println("Area:", s.Area())
}
func main() {
c := Circle{Radius: 5}
r := Rectangle{Width: 4, Height: 6}
PrintArea(c) // 輸出:Area: 78.53981633974483
PrintArea(r) // 輸出:Area: 24
}
在這個(gè)例子中,我們定義了一個(gè)名為Shape
的接口,它包含一個(gè)名為Area
的方法。然后,我們創(chuàng)建了兩個(gè)實(shí)現(xiàn)了Shape
接口的具體類型:Circle
和Rectangle
。最后,我們編寫(xiě)了一個(gè)名為PrintArea
的函數(shù),它接受一個(gè)Shape
類型的參數(shù),并調(diào)用其Area
方法。在main
函數(shù)中,我們分別使用Circle
和Rectangle
類型的值調(diào)用PrintArea
函數(shù),實(shí)現(xiàn)了接口多態(tài)。