[go学习笔记.第十章.面向对象编程] 11.面向对象的三大特性-多态

1.基本介绍

变量(实例)具有多种形态,面向对象的第三大特征,在 go语言,多态特征是通过接口实现的,可以按照统一的接口来调用不同的实现,这时接口变量就呈现不同的形态

package main

import(
    "fmt"
)

// 声明一个接口
type Usb interface {
    //声明了两个没有实现的方法
    Start()
    Stop()
}

//声明一个结构体,实现Usb方法
type Phone struct{

}

func (p Phone) Start()  {
    fmt.Println("手机开始工作...")
}
func (p Phone) Stop()  {
    fmt.Println("手机停止工作...")
}

//相机实现Usb方法
type Camera struct{

}

func (c Camera) Start()  {
    fmt.Println("相机开始工作...")
}
func (c Camera) Stop()  {
    fmt.Println("相机停止工作...")
}

//计算机
type Computer struct{

}
//编写一个方法Working, 接收一个Usb接口类型变量
//实现了Usb接口(就是指实现了Usb接口声明的所有方法)
func (c Computer) Working(usb Usb)  {//usb变量会根据传入的实参,来判断到底是Phone,还是Camera
    //通过Usb接口变量来调用Start,Stop方法
    usb.Start()
    usb.Stop()
}

func main()  {
    //先创建结构体变量
    computer := Computer{}
    phone := Phone{}
    camera := Camera{}

    //关键点
    computer.Working(phone)
    computer.Working(camera)
}
手机开始工作...
手机停止工作...
相机开始工作...
相机停止工作...

 2.接口体现多态的两种形式

 多态参数

        在前面的 Usb 接口案例, Usb usb ,即可以接收手机变量,又可以接收相机变量,就体现了 Usb 接口多态

多态数组

        演示一个案例:给 Usb 数组中,存放 Phone 结构体和 Camera 结构体变量

package main

import(
    "fmt"
)

// 声明一个接口
type Usb interface {
    //声明了两个没有实现的方法
    Start()
    Stop()
}

//声明一个结构体,实现Usb方法
type Phone struct{
    Name string
}

func (p Phone) Start()  {
    fmt.Println("手机开始工作...")
}
func (p Phone) Stop()  {
    fmt.Println("手机停止工作...")
}

//相机实现Usb方法
type Camera struct{
    Name string
}

func (c Camera) Start()  {
    fmt.Println("相机开始工作...")
}
func (c Camera) Stop()  {
    fmt.Println("相机停止工作...")
}

//计算机
type Computer struct{

}
//编写一个方法Working, 接收一个Usb接口类型变量
//实现了Usb接口(就是指实现了Usb接口声明的所有方法)
func (c Computer) Working(usb Usb)  {
    //通过Usb接口变量来调用Start,Stop方法
    usb.Start()
    usb.Stop()
}

func main()  {
    //定义一个Usb接口数组,可以存放Phone,Camera的结构体变量
    //体现多态数组
    var usbArr [3]Usb
    usbArr[0] = Phone{"华为"}
    usbArr[1] = Phone{"小米"}
    usbArr[2] = Camera{"相机"}
    fmt.Println(usbArr)
}

 [上一节][go学习笔记.第十章.面向对象编程] 10.面向对象的特性-接口

 [下一节][go学习笔记.第十章.面向对象编程] 12.类型断言引出和基本使用 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值