接口-面向对象编程的思想-实现多态性
在 Go 语言中,接口通过其灵活的特性,实现了多态性。多态性是面向对象编程中的一个重要概念,它允许不同类型的对象对相同的消息做出响应,从而提高了代码的灵活性和可复用性。
在 Go 语言中,多态性是通过接口的方式来实现的。具体来说,一个对象只要实现了接口规定的方法,即可被看作是该接口类型的实例,从而可以赋值给该接口类型的变量。这样一来,不同的具体类型可以以统一的接口类型进行操作,从而实现了多态性。
package main
import (
"fmt"
)
// 定义一个接口
type Shape interface {
Area() float64
}
// 定义矩形类型
type Rectangle struct {
Width float64
Height float64
}
// 矩形类型实现了 Shape 接口的 Area 方法
func (r Rectangle) Area() float64 {
return r.Width * r.Height
}
// 定义圆形类型
type Circle struct {
Radius float64
}
// 圆形类型实现了 Shape 接口的 Area 方法
func (c Circle) Area() float64 {
return 3.14 * c.Radius * c.Radius
}
func main() {
// 创建一个 Shape 类型的切片
shapes := []Shape{
Rectangle{Width: 3, Height: 4},
Circle{Radius: 5},
}
// 遍历切片,计算每个图形的面积
for _, shape := range shapes {
fmt.Println("面积:", shape.Area())
}
}
在上面的示例中,我们定义了一个 Shape
接口,该接口规定了一个 Area
方法。然后我们创建了 Rectangle
和 Circle
两种具体的类型,并让它们分别实现了 Shape
接口的 Area
方法。最后,在 main
函数中,我们创建了一个 Shape
类型的切片,将具体的 Rectangle
和 Circle
对象存储其中,并通过统一的接口类型调用 Area
方法来计算不同图形的面积。
这样,即使 Rectangle
和 Circle
是不同的具体类型,但它们都可以以统一的 Shape
接口类型进行操作,实现了多态特性。