Golang中接口和继承的区别

  1. 继承的主要价值在于:解决代码的复用性和可维护性;接口的主要价值在于:设计好的规范(方法),让其他自定义类型去实现这些方法。
  2. 接口比继承更加灵活,继承是 is-a 的关系,而接口是 like-a 的关系。
  3. 接口在一定程度上实现了代码的解耦。

最佳实践

package main

import (
	"fmt"
)

//Monkey结构体
type Monkey struct {
	Name string
}

//声明接口
type BirdAble interface {
	Flying()
}

type FishAble interface {
	Swimming()
}

func (this *Monkey) climbing() {
	fmt.Println(this.Name, " 生来会爬树..")
}

//LittleMonkey结构体
type LittleMonkey struct {
	Monkey //继承
}


//让LittleMonkey实现BirdAble
func (this *LittleMonkey) Flying() {
	fmt.Println(this.Name, " 通过学习,会飞翔...")
}
//让LittleMonkey实现FishAble
func (this *LittleMonkey) Swimming() {
	fmt.Println(this.Name, " 通过学习,会游泳..")
}

func main() {

	//创建一个LittleMonkey 实例
	monkey := LittleMonkey{
		Monkey {
			Name : "悟空",
		},
	}
	monkey.climbing()
	monkey.Flying()
	monkey.Swimming()
}

执行结果如下图所示:
在这里插入图片描述