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
}
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: %.2f\n", s.Area())
}
// 使用示例
r := Rectangle{3, 4}
c := Circle{5}
PrintArea(r) // 输出: Area: 12.00
PrintArea(c) // 输出: Area: 78.50
函数PrintArea接收的是接口类型,但传入不同具体类型时,调用的Area()方法各不相同,这就是多态的体现。
基本上就这些。Go通过接口与隐式实现的方式,让多态变得简洁而自然,不需要继承体系,只要方法匹配就能多态调用。









