// 子集
type Humaner interface {
sayhi()
}
// 超集
type Personer interface {
Humaner // 匿名字段,继承sayhi()
sing(lrc string)
}
// 学生类
type Student struct {
name string
id int
}
// Student实现sayhi
func (tmp *Student) sayhi() {
fmt.Printf("Student[%s, %d] sayhi\n", tmp.name, tmp.id)
}
func (tmp *Student) sing(lrc string) {
fmt.Printf("Student在唱着: %s\n", lrc)
}
func main() {
// 定义接口类型的变量
var i Personer
s := &Student{"mike", 666}
i = s
i.sayhi() // 继承过来的方法
i.sing("学生哥")
}
执行如下:
Student[mike, 666] sayhi
Student在唱着: 学生哥
// 定义接口类型的变量
// 超级可以转换为子集,反过来不可以
var iPer Personer // 超集
iPer = &Student{"mike", 666}
var iHum Humaner // 子集
iHum = iPer // 超级转换为子集
iHum.sayhi() // 继承过来的方法