Golang

Go语言面向对象编程三大特征 - 多态

11-19 10:39

在Go语言中,多态是通过接口实现的


变量(实例)具有多种形态,面向对象的第三大特征,

可以按照统一的接口来调用不同的实现,这时接口变量就呈现不同的形态。


比如下面的 Usb 接口案例

//定义(声明)一个 Usb 接口,抽象出通过Usb接口可以做的事情

type Usb interface {

Start()

}

//定义 Phone 类型,让 Phone 实现 Usb 接口的方法

type Phone struct { }

func (phone Phone) Start() {

fmt.Println("手机开始工作...")

}

//定义 Camera 类型,让 Camera 实现 Usb 接口的方法

type Camera struct {}

func (camera Camera) Start() {

fmt.Println("相机开始工作...")

}

//编写一个 Working 方法,接收一个 Usb 接口类型的变量

type Computer struct { }

//usb 变量会根据传入的实参,判断到底时 Phone 还是 Camera(体现出多态的特点)

func (computer Computer) Working(usb Usb) {

usb.Start()

}

func main() {

//创建结构体变量

var phone Phone{}

camera := Camera

computer := new(Computer)

//Working方法中的usb变量,会根据传入的实参,调用对应类型中的方法

computer.Working(phone)

computer.Working(camera)

}

下面的代码重点体现多态的特点


接口体现多态的两种形式

多态参数

比如上面的 Usb 接口案例,usb Usb 既可以接收手机变量,又可以接收相机变量,这就体现了 Usb 接口多态


多态数组

案例演示:同样是上面的 Usb 接口案例,定义一个 Usb 接口数组,可以存放多个结构体变量(体现多态数组)

//定义(声明)一个 Usb 接口,抽象出通过Usb接口可以做的事情

type Usb interface {

Start()

}

//定义 Phone 类型,让 Phone 实现 Usb 接口的方法

type Phone struct { }

func (phone Phone) Start() {

fmt.Println("手机开始工作...")

}

//定义 Camera 类型,让 Camera 实现 Usb 接口的方法

type Camera struct {}

func (camera Camera) Start() {

fmt.Println("相机开始工作...")

}

//编写一个 Working 方法,接收一个 Usb 接口类型的变量

type Computer struct { }

//usb 变量会根据传入的实参,判断到底时 Phone 还是 Camera(体现出多态的特点)

func (computer Computer) Working(usb Usb) {

usb.Start()

}

func main() {

//定义一个 Usb 接口数组,可以存放 Phone 和 Camera 结构体变量(体现多态数组)

var usbArr = [3]Usb{

Phone{"OPPO"},

Phone{"Vivo"},

Camera{"Nikon"},

}

fmt.Println(usbArr)

}

重点看末尾的接口数组,可以体现出多态数组


微信小程序
大潇博客 版权所有 Copyright ©2016~2026
京ICP备17004217号-6  合作QQ:284710375
天玺科技