GOGOUP-11. 接口和多态
作者:互联网
万丈高楼平地起-接口和多态
一、接口基本定义和使用
- 多态就是同一个接口,使用不同的实例而执行不同操作。
- 官方术语:一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口。
- golang接口和dotnet 不同之处在于不需要显示的继承接口,只要实现接口的方法那么就认为实现了接口。通俗不严谨话会吃、会动、就是动物。
- 代码实例
package main import "fmt" //定义一个动物接口 type IAnimal interface { Move() Eat() } //定义个青蛙结构体 type Frog struct { Name string } func (frog *Frog) Move() { fmt.Println(frog.Name, "可以跳着移动") } func (frog *Frog) Eat() { fmt.Println(frog.Name, "吃害虫") } // 上面Frog 实现了IAnimal接口的所有方法,那么接口IAnimal就可以指向Frog实例对象 //定义个青蛙结构体 type Dog struct { Name string } func (dog *Dog) Move() { fmt.Println(dog.Name, "可以奔跑") } func (dog *Dog) Eat() { fmt.Println(dog.Name, "吃骨头") } //上面Frog 实现了IAnimal接口的所有方法,那么接口IAnimal就可以指向Frog实例对象 func AnimalShow(animal IAnimal) { animal.Move() animal.Eat() } func main() { var an IAnimal an = &Frog{"青蛙"} AnimalShow(an) an = &Dog{"狗"} AnimalShow(an) }
- 执行结果
二、inteface{}空接口
- 空接口是接口类型的特殊形式,空接口没有任何方法,因此任何类型都无须实现空接口。从实现的角度看,任何值都满足这个接口的需求。因此空接口类型可以保存任何值,也可以从空接口中取出原值。
- Show Your Code
package main import "fmt" type EmptyIf interface{} //应为空接口没有方法、默认所有类型都实现了空接口。Show这个方法可以接收任何类型的参数 func Show(em EmptyIf) { fmt.Println(em) //断言 推断参数是否string类型 x, ok := em.(string) if ok { fmt.Println("接收到的参数是string 类型", x) } //空接口断言 } type Stu struct { Name string } func main() { Show(11) Show("小明") Show(Stu{"小红"}) }
- 执行结果
标签:11,IAnimal,Name,fmt,多态,Frog,GOGOUP,接口,func 来源: https://www.cnblogs.com/nextworld/p/14988433.html