基本介绍
变量(实例)具有多种形态。面向对象的三大特征,在Go语言,多态特征是通过接口实现的。可以按照统一的接口来调用不同的实现。这时接口变量就呈现不同的形态。
快速入门
在前面的Usb接口案例,Usb usb,既可以接收相机变量,又可以接收手机变量,就体现了Usb接口多态特性。
代码如下:
package main
import(
"fmt"
)
//定义一个接口
type Usb interface{
//声明了两个没有实现的方法
Start()
Stop()
}
type Phone struct{
}
//让Phone实现Usb接口的方法
func (p Phone) Start(){
fmt.Println("手机开始工作了.....")
}
func (p Phone) Stop(){
fmt.Println("手机停止工作了.....")
}
type Camera struct{
}
//让Camera实现Usb接口
func (c Camera) Start(){
fmt.Println("相机开始工作了.....")
}
func (c Camera) Stop(){
fmt.Println("相机停止工作了.....")
}
//计算机
type Computer struct{
}
//编写一个方法Working,接受一个Usb接口类型的变量
func (c Computer) Working(usb Usb){
//通过usb接口变量来调用Start和Stop方法
usb.Start()
usb.Stop()
}
func main() {
computer := Computer{
}
phone := Phone{
}
camera := Camera{
}
computer.Working(phone)
computer.Working(camera)
}
运行结果:
接口体现多态的两种形式
多态参数
Usb接口案例中,Usb usb既可以接收手机变量,又可以接收相机变量。
func (c Computer) Working(usb Usb){
//通过usb接口变量来调用Start和Stop方法
usb.Start()
usb.Stop()
}
func main() {
computer := Computer{
}
phone := Phone{
}
camera := Camera{
}
computer.Working(phone)
computer.Working(camera)
}
多态数组
给Usb数组中,存放Phone结构体和Camera结构体变量。
package main
import(
"fmt"
)
//定义一个接口
type Usb interface{
//声明了两个没有实现的方法
Start()
Stop()
}
type Phone struct{
name string
}
//让Phone实现Usb接口的方法
func (p Phone) Start(){
fmt.Println("手机开始工作了.....")
}
func (p Phone) Stop(){
fmt.Println("手机停止工作了.....")
}
type Camera struct{
name string
}
//让Camera实现Usb接口
func (c Camera) Start(){
fmt.Println("相机开始工作了.....")
}
func (c Camera) Stop(){
fmt.Println("相机停止工作了.....")
}
func main() {
var usbArr [4]Usb
usbArr[0] = Phone{
"苹果"}
usbArr[1] = Camera{
"索尼"}
usbArr[2] = Phone{
"华为"}
usbArr[3] = Camera{
"尼康"}
for _,value := range usbArr{
value.Start()
value.Stop()
}
}
运行结果:
博主首页链接:https://blog.csdn.net/weixin_44736475
原创不易,希望大家多多支持
如果文章对你有帮助,记得一键三连哦!❤️❤️❤️
转载:https://blog.csdn.net/weixin_44736475/article/details/114222071
查看评论