0
点赞
收藏
分享

微信扫一扫

23.Go面向对象-接口继承与转换

23.Go面向对象-接口继承与转换

7 接口继承与转换(了解)

接口也可以实现继承:

// 子集
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() // 继承过来的方法



举报

相关推荐

0 条评论