Go语言通过接口实现多态,无需类和继承。定义Shape接口包含Area方法,Rectangle和Circle结构体分别实现该方法,计算各自面积。PrintArea函数接收Shape接口类型,运行时根据实际传入的类型调用对应Area实现,输出相应结果。这种隐式接口实现机制使不同类型可被统一接口调用,体现多态性。

Go语言中没有传统面向对象语言中的“类”和“继承”,但通过接口(interface)和方法集的机制,自然支持多态。多态的本质是:同一个接口可以被不同的类型实现,调用相同的方法名时,会根据实际类型执行不同的逻辑。
在Go中,接口是一组方法签名的集合。任何类型只要实现了这些方法,就自动实现了该接口,无需显式声明。
例如,定义一个Shape接口:
type Shape interface {
Area() float64
}
这个接口要求实现一个Area()方法,返回面积值。
立即学习“go语言免费学习笔记(深入)”;
让Rectangle和Circle分别实现Shape接口:
type Rectangle struct {
Width, Height float64
}
<p>func (r Rectangle) Area() float64 {
return r.Width * r.Height
}</p><p>type Circle struct {
Radius float64
}</p><p>func (c Circle) Area() float64 {
return 3.14 <em> c.Radius </em> c.Radius
}</p>虽然结构不同,但都实现了Area()方法,因此都可以赋值给Shape接口变量。
接口变量在运行时保存具体类型的值和方法,调用方法时会自动找到对应实现:
func PrintArea(s Shape) {
fmt.Printf("Area: %.2f\n", s.Area())
}
<p>// 使用示例
r := Rectangle{3, 4}
c := Circle{5}</p><p>PrintArea(r) // 输出: Area: 12.00
PrintArea(c) // 输出: Area: 78.50</p>函数PrintArea接收的是接口类型,但传入不同具体类型时,调用的Area()方法各不相同,这就是多态的体现。
基本上就这些。Go通过接口与隐式实现的方式,让多态变得简洁而自然,不需要继承体系,只要方法匹配就能多态调用。
以上就是Golang接口多态如何实现的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号