【GO】go多态

本文介绍了如何利用Go语言的接口机制,通过类绑定方法来实现类似Java/C++的多态功能。通过实例展示了如何定义接口、创建不同等级的类,并通过接口调用实现多态攻击效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mumu_wangwei

主修"红尘道--红尘练心"

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值