Golang如何体现面向对象三大特征之多态?

基本介绍

变量(实例)具有多种形态。面向对象的三大特征,在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
原创不易,希望大家多多支持
如果文章对你有帮助,记得一键三连哦!❤️❤️❤️

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值