Golang 继承和多态 interface实现.

接口名称: Unit
父类名称: Obj
子类1名称: craeture
子类2名称: player

  1. 将2个子类继承Obj父类.
  2. 依次实现子类player和creature的接口, 接口名称和返回值要求和Unit 保持一致,并且要求全部实现,这样才可以继承interface接口
  3. 编写一个形参为 Unit对象的函数show(), 用于调用打印子类信息. 这样可以更直观的理解继承Unit interface.
  4. main里创建Unit对象并初始化.
  5. 将Unit对象扔到show()里边,查看打印信息.

这样的继承方式符合开闭原则
即便在增加其他子类,也不需要关注之前的代码.不会影响之前代码.


package main

import "fmt"

// 接口
type Unit interface {
	GetName() string
	GetLevel() int
	GetHp() int
}

// 对象类
type Obj struct {
	name  string
	level int
	hp    int
}

// 生物类
type creature struct {
	Obj //继承对象类
}

func (c *creature) GetName() string {
	return c.name
}
func (c *creature) GetLevel() int {
	return c.level
}
func (c *creature) GetHp() int {
	return c.hp
}

// 玩家类
type player struct {
	Obj
}

func (c *player) GetName() string {
	return c.name
}
func (c *player) GetLevel() int {
	return c.level
}
func (c *player) GetHp() int {
	return c.hp
}

//统一show
func show(u Unit) {
	fmt.Printf("名字:%s\n", u.GetName())
	fmt.Printf("等级:%d\n", u.GetLevel())
	fmt.Printf("血量:%d\n", u.GetHp())
}

func main() {
	var c Unit //创建Unit对象, 目前指针指向空
	c = &creature{Obj{ //将Unit对象初始化
		name:  "生物1",
		level: 101,
		hp:    10001,
	}}
	show(c) //统一接口show
	fmt.Println("---------------------")
	var p Unit
	p = &player{Obj{
		name:  "玩家1",
		level: 102,
		hp:    10002,
	}}
	show(p)
}


打印结果:

名字:生物1
等级:101
血量:10001
---------------------
名字:玩家1
等级:102
血量:10002
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值