在Go語言中,接口(interface)可以實現多態性。多態性是指不同的類型可以表現出相同的行為。
要實現多態性,需要定義一個接口,并在不同的類型中實現該接口。然后,可以通過接口類型的變量來調用實現了接口的方法,從而實現多態性。
以下是實現多態性的方法:
type Shape interface {
Area() float64
Perimeter() float64
}
type Rect struct {
width float64
height float64
}
func (r Rect) Area() float64 {
return r.width * r.height
}
func (r Rect) Perimeter() float64 {
return 2 * (r.width + r.height)
}
type Circle struct {
radius float64
}
func (c Circle) Area() float64 {
return math.Pi * c.radius * c.radius
}
func (c Circle) Perimeter() float64 {
return 2 * math.Pi * c.radius
}
func printShapeInfo(s Shape) {
fmt.Println("Area:", s.Area())
fmt.Println("Perimeter:", s.Perimeter())
}
func main() {
rect := Rect{width: 5, height: 3}
circle := Circle{radius: 2}
printShapeInfo(rect)
printShapeInfo(circle)
}
在上面的示例中,Shape
接口定義了兩個方法Area()
和Perimeter()
。然后,Rect
和Circle
結構體分別實現了Shape
接口,并提供了這兩個方法的具體實現。
在main
函數中,我們創建了一個Rect
類型的變量rect
和一個Circle
類型的變量circle
。然后,我們調用printShapeInfo
函數,傳入rect
和circle
,實現了多態性。printShapeInfo
函數中的參數類型為Shape
接口,因此可以傳入任何實現了Shape
接口的類型,并調用對應的方法。
最終,輸出結果是Rect
和Circle
的面積和周長。這說明通過接口實現了多態性,不同類型的變量可以表現出相同的行為。