开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:多态及体现】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9705
多态及体现
基本内容
一、多态特征
二、接口体现多态特征
一、多态特征
1、基本介绍
变量(实例)具有多种形态。面对对象的第三大特征,在 Go语言,多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。
2、快速入门
在前面的 Usb 接口案例,Usb usb,既可以接收手机变量,又可以接收相机变量,就体现了 Usb 接口多态特性
//编写一个方法 Working 方法,接收一个 Usb 接口类型变量只要是实现了 Usb 接口(所谓实现 Usb 接口,就是指实现了 Usb 接口声明所有方法)
func(c Computer)Working(usb Usb){
//usb 变量全根据传入的实参,来判断到底是 Phone,还是 Camera
//通过usb接用变量来调用 Start 和 Stop 方法 usb 接口变量就体现出多态的特点
usb.Start()
usb.Stop()
}
二、接口体现多态特征
接口体现多态的两种形式
1、多态参数
在前面的Usb接口案例,Usb usb,既可以接收手机变量,又可以接收相机变量,就体现了Usb接口多态特性
2、多态数组
(1)演示一个案例:给Usb数组中,存放Phone结构体和Camera结构体变量(实现了该接口任何结构体的变量)
案例说明:利用多态特点来实现
func main({
//定义一个Usb接口数组,可以存放Phone和Camera的结构体变量
//这里就体现出多态数组
var usbArr [3]Usb
usbAr[0] = Phone{"vivo"}
usbAr[1]=Phone{"小米"}
usbAr[2]=Camera{"尼康"}
fmt.Println(usbArr)
此时,运行结果如下:
(2)Phone 还有一个特有的方法 call(),请遍历Usb数组,如果是 Phone 变量,除了调用 Usb 接口声明的方法外,还需调用 Phone 特有方法 call