接口详解
-
多态
,指代码可以根据类型的具体实现采取不同行为的能力python
和C++
中都有继承类的方法重写,来实现多态
-
拿C++中的经典例子来看,求面积和周长
- 分别定义了circle和rectangle类型和返回其周长和面积的方法函数
- 通过geometry类型接口,声明了这两个方法
- 在measure函数中,函数的接收者是一个接口类型变量
- 但是在调用的时候,是可以直接把circle和rectangle类型的变量塞进去的,就是因为这两个类型的变量实现了接口中所声明的所有方法,从而实现了多态,一个
measure
函数hold住所有实现了这个接口的数据类型???
package main
import (
"fmt"
"math"
)
type geometry interface {
area() float32
perimeter() float32
}
type rect struct {
width, height float32
}
type circle struct {
radius float32
}
func (r rect) area() float32 {
return r.height * r.width
}
func (c circle) area() float32 {
return math.Pi * c.radius * c.radius
}
func (r rect) perimeter() float32 {
return 2 * (r.height + r.width)
}
func (c circle) perimeter() float32 {
return 2 * math.Pi * c.radius
}
func measure(g geometry) {
fmt.Println(g.area())
fmt.Println(g.perimeter())
}
func main() {
r := rect{3, 4}
c := circle{3}
measure(r)
measure(c)
}
执行结果:
12
14
28.274334
18.849556