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

Go语言中没有传统面向对象语言中的“类”和“继承”,但通过接口(interface)和方法集的机制,自然支持多态。多态的本质是:同一个接口可以被不同的类型实现,调用相同的方法名时,会根据实际类型执行不同的逻辑。
接口定义行为
在Go中,接口是一组方法签名的集合。任何类型只要实现了这些方法,就自动实现了该接口,无需显式声明。
例如,定义一个Shape接口:
type Shape interface { Area() float64}
这个接口要求实现一个Area()方法,返回面积值。
立即学习“go语言免费学习笔记(深入)”;
不同类型实现同一接口
让Rectangle和Circle分别实现Shape接口:
v2.0推券客淘客优惠券程序
推券客cms采用thinkphp为内核框架开发,安全稳定高效。不需要任何淘宝API接口,不需要任何淘宝API接口,每天自动更新七万多带内部优惠券的商品,轻松实现超高佣金。
156 查看详情
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 3.14 c.Radius c.Radius}
虽然结构不同,但都实现了Area()方法,因此都可以赋值给Shape接口变量。
运行时动态调用
接口变量在运行时保存具体类型的值和方法,调用方法时会自动找到对应实现:
func PrintArea(s Shape) { fmt.Printf("Area: %.2fn", s.Area())}// 使用示例r := Rectangle{3, 4}c := Circle{5}
PrintArea(r) // 输出: Area: 12.00PrintArea(c) // 输出: Area: 78.50
函数PrintArea接收的是接口类型,但传入不同具体类型时,调用的Area()方法各不相同,这就是多态的体现。
基本上就这些。Go通过接口与隐式实现的方式,让多态变得简洁而自然,不需要继承体系,只要方法匹配就能多态调用。
以上就是Golang接口多态如何实现的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1146275.html
微信扫一扫
支付宝扫一扫