go语言

go语言中的type如何实现多态

小樊
81
2024-12-12 08:10:47
栏目: 编程语言

在 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() 的方法。然后,我们定义了两个结构体 RectangleCircle,并为它们分别实现了 Area() 方法。这样,RectangleCircle 都实现了 Shape 接口,具有了多态性。

TotalArea 函数中,我们接受一个 Shape 类型的切片作为参数,并遍历它,累加每个形状的面积。这里,我们可以使用任何实现了 Shape 接口的类型,而不仅仅是 RectangleCircle。这就是多态的体现。

0
看了该问题的人还看了