在 Go 语言中,多态是通过接口(interface)来实现的。接口定义了一组方法,但不实现它们。任何实现了这些方法的类型都可以被认为实现了该接口,从而具有多态性。
下面是一个简单的示例,展示了如何使用接口实现多态:
package main import ( "fmt" ) // 定义一个接口 Shape,包含一个方法 Area() type Shape interface { Area() float64 } // 定义一个矩形结构体 Rectangle type Rectangle struct { Width float64 Height float64 } // 为 Rectangle 类型实现 Shape 接口的 Area() 方法 func (r Rectangle) Area() float64 { return r.Width * r.Height } // 定义一个圆形结构体 Circle type Circle struct { Radius float64 } // 为 Circle 类型实现 Shape 接口的 Area() 方法 func (c Circle) Area() float64 { return 3.14 * c.Radius * c.Radius } // 计算形状的总面积 func TotalArea(shapes []Shape) float64 { total := 0.0 for _, shape := range shapes { total += shape.Area() } return total } func main() { shapes := []Shape{ Rectangle{Width: 10, Height: 5}, Circle{Radius: 3}, } fmt.Println("Total area:", TotalArea(shapes)) }
在这个示例中,我们定义了一个名为 Shape
的接口,它包含一个名为 Area()
的方法。然后,我们定义了两个结构体 Rectangle
和 Circle
,并为它们分别实现了 Area()
方法。这样,Rectangle
和 Circle
都实现了 Shape
接口,具有了多态性。
在 TotalArea
函数中,我们接受一个 Shape
类型的切片作为参数,并遍历它,累加每个形状的面积。这里,我们可以使用任何实现了 Shape
接口的类型,而不仅仅是 Rectangle
和 Circle
。这就是多态的体现。