Go本身不具有多态的特性,不能够像Java、C++那样编写多态类、多态方法。但是,使用Go可以编写具有多态功能的类绑定的方法。为什么这么说呢?因为Go使用struct构建类,根据不同类调用不同的方法。下面将展示如何使用Go编写多态功能。
package main
import "fmt"
//实现go多态,需要实现定义接口
//认类的武器发起攻击,不同等级子弹效果不同
// IAttack 定义一个接口,注意类型是interface
type IAttack interface {
// Attack 接口函数可以有多个,但只能是函数原型,不可以有实现
Attack()
//Attack1()
}
// HumanLowLevel 低等级
type HumanLowLevel struct {
name string
level int
}
func (a *HumanLowLevel) Attack() {
fmt.Println("我是:", a.name, ",等级为:", a.level, ",造成1000点伤害")
}
// HumanHighLevel 高等级
type HumanHighLevel struct {
name string
level int
}
func (a *HumanHighLevel) Attack() {
fmt.Println("我是:", a.name, ",等级为:", a.level, ",造成5000点伤害")
}
//定义一个多态的通用接口,传入不同的对象,调用同样的方法,实现不同的效果==》多态
func DoAttack(a IAttack) {
a.Attack()
}
func main() {
var player IAttack //定义一个包含Attack的接口变量
lowLevel := HumanLowLevel{
name: "David",
level: 1,
}
highLevel := HumanHighLevel{
name: "David",
level: 10,
}
lowLevel.Attack()
highLevel.Attack()
//对player赋值为lowLevel,接口需要使用指针类型来赋值
player = &lowLevel
player.Attack()
player = &highLevel
player.Attack()
fmt.Println("多态。。。。。")
DoAttack(&lowLevel)
DoAttack(&highLevel)
}