多态是指代码可以根据类型的具体实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,都支持这种类型的值。
如果用户定义的类型实现了某个接口类型声明的一组方法,那么这个用户定义的类型的值就可以赋给这个接口类型的值。
go语言的接口采用鸭子类型的思想(如果走起路来像鸭子,那么它就是鸭子),实现时不需要显式的声明实现了什么接口。下面的Cat和Dog的实现是一个例子:
1 | package main |
main函数创建一个Animal类型的值, 并将animal1和animal2的地址传给了Eat和Sleep, 这会导致最终具体类型Cat和Dog的对应方法的执行, 因此这个Eat和Sleep函数可以同时执行Cat和Dog的行为