6.10. 第8节:接口的继承和转换

未匹配的标注
本文档最新版为 2023,旧版本可能放弃维护,推荐阅读最新版!

接口的继承和转换

package main

import "fmt"

type Humaner interface {
    //子集
    sayhi()
}

type Personer interface {
    //超集
    //继承与humaner
    Humaner

    sing(string)
}

type Student struct {
    name string
    sex  string
    age  int
}

func (s *Student) sayhi() {
    fmt.Printf("大家好,我是%s,我是%s生,我的年龄是%d\n",
        s.name, s.sex, s.age)
}

func (s *Student) sing(name string) {
    fmt.Println("我为大家唱首歌", name)
}
func main0601() {

    //接口类型变量定义
    var h Humaner

    var stu Student = Student{"王飞", "男", 35}
    h = &stu
    h.sayhi()

    //接口类型变量定义
    var p Personer
    p = &stu

    //从humaner继承来的
    p.sayhi()
    p.sing("传奇")
}
func main0602() {

    //接口类型变量定义
    var h Humaner  //子集
    var p Personer //超集
    var stu Student = Student{"王飞", "男", 35}

    h = &stu
    //将一个接口赋值给另外一个接口
    //超集中包含所有子集的方法
    h = p //ok
    h.sayhi()

    //子集不包含超集
    //可以将超集赋值给子集  不能将子集赋值给超集
    //p = h //err

    //p.sayhi()
    //p.sing("红豆")

}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~