卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章52509本站已运行31128

golang函数在面向对象编程中的多态性实现

在 go 语言中,函数可以作为接口值存储,从而实现多态性:定义接口,规定一组方法签名。创建实现接口的类型,并为其实现这些方法。定义一个函数,接受接口值作为输入。函数中仅使用接口值的方法,而不考虑实际类型。使用不同类型的值调用函数,实现多态性。

golang函数在面向对象编程中的多态性实现

Go 语言函数在面向对象编程中的多态性实现

在 Go 语言中,函数可以作为接口值存储,这使我们能够实现多态性,即使 Go 语言本身不是面向对象的。

接口

接口定义了一组方法的签名,实现接口的类型必须实现这些方法。例如,我们定义一个 Shape 接口:

type Shape interface {
    Area() float64
}

类型实现接口

我们可以创建实现 Shape 接口的类型,如下所示:

type Rectangle struct {
    width, height float64
}

func (r Rectangle) Area() float64 {
    return r.width * r.height
}

type Circle struct {
    radius float64
}

func (c Circle) Area() float64 {
    return math.Pi * c.radius * c.radius
}

使用函数作为接口值

现在,我们创建了一个 Shape 接口,我们可以使用函数作为其值。为此,我们定义一个 calculateArea 函数,它接受一个 Shape 接口值作为输入。

func calculateArea(s Shape) float64 {
    return s.Area()
}

实战案例

现在,让我们创建一个实例来演示多态性是如何实现的。

func main() {
    // 创建一个 Rectangle 和一个 Circle
    r := Rectangle{width: 2, height: 3}
    c := Circle{radius: 5}

    // 使用函数计算他们的面积
    areaR := calculateArea(r)
    areaC := calculateArea(c)

    fmt.Println("Rectangle area:", areaR)
    fmt.Println("Circle area:", areaC)
}

输出:

Rectangle area: 6
Circle area: 78.53981633974483

在这个例子中,calculateArea 函数只使用传入的 Shape 接口的 Area 方法,无论实际类型是 Rectangle 还是 Circle。这就是多态性的体现。

卓越飞翔博客
上一篇: golang管道的特性对函数通信的影响
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏