go语言多态

多态是同一个行为具有多个不同表现形式或形态的能力。
比如动物都会叫,但是不同种类的动物叫的声音不一样。

Go 语言并没有设计诸如虚函数、纯虚函数、继承、多重继承等概念,但它通过接口却非常优雅地支持了面向对象的特性。

多态是一种运行期的行为,它有以下几个特点:
1、一种类型具有多种类型的能力
2、允许不同的对象对同一消息做出灵活的反应
3、以一种通用的方式对待个使用的对象
4、非动态语言必须通过继承和接口的方式来实现

通过接口实现多态

type Animal interface {
	Say() string
}
// dog
type Dog struct {
}

func (d Dog) Say() string {
	// 汪汪
	return "汪"
}
// cat
type Cat struct {
}

func (c Cat) Say() string {
	// 喵喵
	return "喵"
}
package main

import "fmt"

func main() {
	animals := []Animal{Dog{}, Cat{}}
	for _, animal := range animals {
		fmt.Println(animal.Say())
	}
}

参考资料

[1] 如何用 interface 实现多态
[2] 4.2 接口