初学Golang:多态性的实现
Code Speaks:
package main import "fmt" import "math" /** * 定义几何接口 */ type geometry interface { area() float64 perim() float64 } /** * 定义矩形结构 */ type rect struct { width, height float64 } /** * 定义圆形结构 */ type circle struct { radius float64 } /** * 实现矩形面积方法 */ func (r rect) area() float64 { return r.width * r.height } /** * 实现矩形周长方法 */ func (r rect) perim() float64 { return 2*r.width + 2*r.height } /** * 实现圆形面积方法 */ func (c circle) area() float64 { return math.Pi * c.radius * c.radius } /** * 实现圆形周长方法 */ func (c circle) perim() float64 { return 2 * math.Pi * c.radius } /** * 接口做参数实现计算方法 * @param g geometry 接口参数 * @return */ func measure(g geometry) { fmt.Println(g) fmt.Println(g.area()) fmt.Println(g.perim()) } /** * main方法调用 * @return */ func main() { r := rect{width: 3, height: 4} c := circle{radius: 5} /** * 多态调用 */ measure(r) measure(c) }
1.Golang中实现接口中定义的方法即被视为实现了接口,不需显示声明实现某接口
2.Golang的接口更大的作用是声明方法集合,而非类型约束
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~