Go 接口

1 概念与实现

  • 声明接口
package interface_demo

// interface for behavior
type Behavior interface {
	Run() string
	Eat() string
}
  • 如何实现接口
type Animal struct {
	Color string // 属性
}

// 定义Dog结构体
type Dog struct {
	Animal     // Dog包含Animal的所有属性和方法
	ID     int // 属性
	Name   string
	Age    float32
}

func (d *Animal) Eat() string {
	fmt.Println("yummy yummy!")
	return "yummy yummy!"
}

func (d *Dog) Run() string {
	fmt.Println("ID:", d.ID, " Dog is running")
	return "Dog is running"
}

image-20210616203228548

image-20210616204618949

image-20210616204534149

加interface即可定义接口

接口的实现为隐式实现,不用像java一样去继承,只要方法名,入参,返回值相同即可。这未免太随意了。

2 多态

  • 面向对象特征:多态

接口

package interface_demo

// interface for behavior
type Behavior interface {
	Run() string
	Eat() string
}

多种实现

type Animal struct {
	Color string // 属性
}

// 定义Dog结构体
type Dog struct {
	Animal     // Dog包含Animal的所有属性和方法
	ID     int // 属性
	Name   string
	Age    float32
}

type Cat struct {
	Animal
	ID   int
	Name string
	Age  float32
}


func (d *Dog) Eat() string {
	fmt.Println("yummy yummy!")
	return "yummy yummy!"
}

func (d *Dog) Run() string {
	fmt.Println("ID:", d.ID, " Dog is running")
	return "Dog is running"
}

// method of cat
func (c *Cat) Eat() string {
	fmt.Println("Cat -> yummy yummy!")
	return "Cat -> yummy yummy!"
}

// method of cat
func (c *Cat) Run() string  {
	fmt.Println("ID:", c.ID, " Cat is running")
	return "Cat is running"
}
  • 接口定义变量
func main() {
	// 测试接口定义变量
	var b interface_demo.Behavior
	b = new(struct_demo.Dog)
	b.Run()

	dog := new(struct_demo.Dog)
	cat := new(struct_demo.Cat)
	action(dog)
	action(cat)
}

// 测试接口定义变量
func action(b interface_demo.Behavior) string {
	b.Run()
	b.Eat()
	return ""
}

log

ID: 0  Dog is running
ID: 0  Dog is running
yummy yummy!
ID: 0  Cat is running
Cat -> yummy yummy!

3 总结

怎么定义接口?

interface声明

怎么实现接口?

不需要显示的实现,go语言为隐式实现

要求,如果实现接口,那么就必须实现接口的所有方法,同时要求入参出参一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值