golang面向对象编程思想-多态
2021/6/1 22:50:52
本文主要是介绍golang面向对象编程思想-多态,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、基本介绍
实例具有多种形态。面向对象的三大特性,在GO语言中,多态的特征通过接口实现的,可以按照统一的接口来调用不同的实现,这时接口变量就是不同的形态.
package main import ( "fmt" ) type Usb interface { Start() Stop() } type Phone struct { } // 让Phone实现Usb接口方法 func (phone Phone) Start() { fmt.Println("手机开始工作...") } func (phone Phone) Stop() { fmt.Println("手机停止工作...") } type Camera struct { } // 让Camera实现Usb接口方法 func (camera Camera) Start() { fmt.Println("相机开始工作...") } func (camera Camera) Stop() { fmt.Println("相机停止工作...") } type Computer struct { } // 编写一个方法Working方法,接收一个Usb接口类型变量 // 只要是实现了Usb接口,(所谓实现Usb接口,就是指实现了Usb接口声明所有方法) func (computer Computer) Working(usb Usb) { // usb变量会根据传入的实参,来判断到底是Phone还是Camera // 通过usb接口变量来调用Start和Stop方法 usb.Start() usb.Stop() } func main() { computer := Computer{} phone := Phone{} computer.Working(phone) camera := Camera{} computer.Working(camera) }
输出结果:
手机开始工作... 手机停止工作... 相机开始工作... 相机停止工作...
二、接口体现多态特性
-
多态参数
在前面的Usb接口案例,Usb usb,即可以接收手机变量,又可以接收相机变量,就实现了Usb接口多态 -
多态数组
package main import ( "fmt" ) type Usb interface { Start() Stop() } type Phone struct { Name string } // 让Phone实现Usb接口方法 func (phone Phone) Start() { fmt.Println("手机开始工作...") } func (phone Phone) Stop() { fmt.Println("手机停止工作...") } func (phone Phone) Call() { fmt.Println("手机可以打电话...") } type Camera struct { Name string } // 让Camera实现Usb接口方法 func (camera Camera) Start() { fmt.Println("相机开始工作...") } func (camera Camera) Stop() { fmt.Println("相机停止工作...") } func main() { var usbArr [3]Usb usbArr[0] = Phone{"小米"} usbArr[1] = Phone{"vivo"} usbArr[2] = Camera{"尼康"} for _, v := range usbArr { v.Start() v.Stop() if phone, ok := v.(Phone); ok { phone.Call() } } }
输出结果:
手机开始工作... 手机停止工作... 手机可以打电话... 手机开始工作... 手机停止工作... 手机可以打电话... 相机开始工作... 相机停止工作...
这篇关于golang面向对象编程思想-多态的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-21MongoDB资料:新手入门与初级应用指南
- 2024-09-20MongoDB教程:初学者必备指南
- 2024-09-05MongoDB入门:快速掌握NoSQL数据库基础
- 2024-08-28go 项目中怎么打印调试-icode9专业技术文章分享
- 2024-08-21swoole未来的发展前景与golang对比哪个更好-icode9专业技术文章分享
- 2024-08-16goland 已经下了中文插件了, 怎么设置成中文-icode9专业技术文章分享
- 2024-07-26使用 SendGrid 的 Go 客户端库能同时给多个邮箱发吗-icode9专业技术文章分享
- 2024-07-26使用 SendGrid 的 Go 客户端库时怎么设置header 和 标签tag 呢-icode9专业技术文章分享
- 2024-07-26SendGrid 对邮件的类别(Categories)和标签的数量有限制吗?-icode9专业技术文章分享
- 2024-07-17课程推荐《高性能GO企业级APM监控系统实战》