Golang 面向对象编程 多态

基本介绍


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

在前面的Usb接口案例,usb既可以接收手机变量,又可以接收相机变量,就体现了Usb接口多态特性。(自动的根据上下文环境来判断usb变量到底是什么类型的变量)

接口体现多态特征


1)多态参数

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

2)多态数组

演示一个案例:给Usb数组中,存放Phone结构体和Camera结构体变量,Phone还有一个特有的方法call(),请遍历Usb数组,如果是Phone变量,除了调用Usb接口声明的方法外,还需要调用Phone特有方法call.

Go 复制代码
package main

import "fmt"

type Usb interface {
	Working()
}

type Phone struct {
}

type Camera struct {
}

func (*Phone) Working() {
	fmt.Println("phone start working......")
}

func (*Camera) Working() {
	fmt.Println("camera start working......")
}

func test(usb ...Usb) {
	for _, v := range usb {
		v.Working()
	}
}

func main() {
	p := new(Phone)
	c := new(Camera)
	test(p, c)
}

有时候需要去做判断,去看传进来的变量具体是哪种类型,可以使用什么样的方法。这个时候就需要去使用类型断言。

这个类型也不能瞎转化,这个得空接口的的确确指向的是Point类型。同时注意指=指向的是结构体变量类型还是结构体指针类型。

其实就是要将空接口转化为对应的类型,那么就会使用到类型断言。

在类型断言的时候,如果不匹配,就会报错panic,因此进行类型断言的时候要确保原来空接的类型指向的转换就是要断言的类型。

这样判断避免了类型断言失败导致整个程序崩溃。

相关推荐
周杰伦_Jay8 分钟前
【网络编程、架构设计与海量数据处理】网络编程是数据流转的血管,架构设计是系统扩展的骨架,海量数据处理是业务增长的基石。
网络·golang·实时互动·云计算·腾讯云·语音识别
岁忧2 小时前
Go channel 的核心概念、操作语义、设计模式和实践要点
网络·设计模式·golang
Tony Bai6 小时前
从 Python 到 Go:我们失去了什么,又得到了什么?
开发语言·后端·python·golang
雪域迷影13 小时前
Go语言中通过get请求获取api.open-meteo.com网站的天气数据
开发语言·后端·http·golang·get
数据知道16 小时前
Go语言设计模式:适配器模式详解
设计模式·golang·建造者模式
数据知道1 天前
Go语言设计模式:工厂模式详解
开发语言·设计模式·golang·go语言·工厂模式
人邮异步社区1 天前
推荐几本学习计算机语言的书
java·c语言·c++·python·学习·golang
千码君20162 天前
Go语言:解决 “package xxx is not in std”的思路
开发语言·后端·golang
Ypuyu2 天前
【GoLang】【框架学习】【GORM】4. 使用 BeforeUpdate hook 操作时,出现反射报错
开发语言·学习·golang
脚踏实地的大梦想家2 天前
【Go】P17 Go语言并发编程核心:深入理解 Goroutine (从入门到实战)
java·开发语言·golang