本篇文章主要为Go语言 类相关多态内容定义及示例。
目录
多态
Go语言的多态不需要继承,只要实现相同的接口即可。
定义接口
实现go多态,需要实现定义接口。
定义一个接口,类型是interface。
人类的武器发起攻击,不同的登记子弹效果不同。
示例如下:
Go
package main
import "fmt"
// 实现go多态,需要实现定义接口。
// 人类的武器发起攻击,不同的登记子弹效果不同。
// 定义一个接口,类型是interface。
type IAttack interface {
// 接口函数可以有多个,但是只能有函数,而不能实现
Attack()
}
// 低等级
type HumanLowLevel struct {
name string
level int
}
func (this *HumanLowLevel) Attack() {
fmt.Println("我是:", this.name, " 等级:", this.level)
}
赋值并调用
定义一个包含Attack的接口变量。
对player赋值为lowLevel,接口需要使用指针类型来赋值。
示例如下:
Go
func main() {
// 定义一个包含Attack的接口变量
var player IAttack
lowLevel := HumanLowLevel{
"Mike",
1,
}
highLevel := HumanLowLevel{
"John",
10,
}
lowLevel.Attack()
highLevel.Attack()
// 对player赋值为lowLevel,接口需要使用指针类型来赋值
player = &lowLevel
player.Attack()
player = &highLevel
player.Attack()
}
值接收者和指针接收者,二者都可以调用方法。
因为 Go 语言编译器自动做了转换,
所以值类型接收者和指针类型接收者是等价的。
多态
定义一个多态的通用接口,传入不同的对象,调用同样的方法,实现不同的效果。
示例如下:
Go
func DoAttack(a IAttack) {
a.Attack()
}
func main() {
// 定义一个包含Attack的接口变量
var player IAttack
lowLevel := HumanLowLevel{
"Mike",
1,
}
highLevel := HumanLowLevel{
"John",
10,
}
lowLevel.Attack()
highLevel.Attack()
// 对player赋值为lowLevel,接口需要使用指针类型来赋值
player = &lowLevel
player.Attack()
player = &highLevel
player.Attack()
fmt.Println("多态......")
DoAttack(&lowLevel)
DoAttack(&highLevel)
}
说明
1.定义一个接口,里面设计好需要的接口,可以有多个
2.任何实现了这个接口的类型,都可以赋值给这个接口,从而实现多态
3.多个类之间不需要有继承关系
4.如果interface中定义了多个接口,那么实际的类必须全部实现接口函数,才可以赋值
总结
本篇文章主要为Go语言 类相关多态内容定义及示例。