美文网首页
第04天(面对对象编程)_04

第04天(面对对象编程)_04

作者: lucas777 | 来源:发表于2020-01-06 23:23 被阅读0次

16_接口的继承.go

package main

import "fmt"

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.Println("Student在唱着:", lrc)
}

func main() {
    //定义一个接口类型的变量
    var i Personer
    s := &Student{"mike", 666}
    i = s

    i.sayhi() //继承过来的方法
    i.sing("学生哥")
}

17_接口转换.go

package main

import "fmt"

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.Println("Student在唱着:", lrc)
}

func main() {
    //超集可以转换为子集,反过来不可以
    var iPro Personer //超集
    iPro = &Student{"mike", 666}

    var i Humaner //子集

    //iPro = i //err
    i = iPro //可以,超集可以转换为子集
    i.sayhi()

}

18_空接口.go

package main

import "fmt"

func xxx(arg ...interface{}) {

}

func main() {
    //空接口万能类型,保存任意类型的值
    var i interface{} = 1
    fmt.Println("i = ", i)

    i = "abc"
    fmt.Println("i = ", i)
}

19_类型断言:if.go

package main

import "fmt"

type Student struct {
    name string
    id   int
}

func main() {
    i := make([]interface{}, 3)
    i[0] = 1                    //int
    i[1] = "hello go"           //string
    i[2] = Student{"mike", 666} //Student

    //类型查询,类型断言
    //第一个返回下标,第二个返回下标对应的值, data分别是i[0], i[1], i[2]
    for index, data := range i {
        //第一个返回的是值,第二个返回判断结果的真假
        if value, ok := data.(int); ok == true {
            fmt.Printf("x[%d] 类型为int, 内容为%d\n", index, value)
        } else if value, ok := data.(string); ok == true {
            fmt.Printf("x[%d] 类型为string, 内容为%s\n", index, value)
        } else if value, ok := data.(Student); ok == true {
            fmt.Printf("x[%d] 类型为Student, 内容为name = %s, id = %d\n", index, value.name, value.id)
        }
    }
}

20_类型断言:switch.go

package main

import "fmt"

type Student struct {
    name string
    id   int
}

func main() {
    i := make([]interface{}, 3)
    i[0] = 1                    //int
    i[1] = "hello go"           //string
    i[2] = Student{"mike", 666} //Student

    //类型查询,类型断言
    for index, data := range i {
        switch value := data.(type) {
        case int:
            fmt.Printf("x[%d] 类型为int, 内容为%d\n", index, value)
        case string:
            fmt.Printf("x[%d] 类型为string, 内容为%s\n", index, value)
        case Student:
            fmt.Printf("x[%d] 类型为Student, 内容为name = %s, id = %d\n", index, value.name, value.id)
        }
    }
}

相关文章

网友评论

      本文标题:第04天(面对对象编程)_04

      本文链接:https://www.haomeiwen.com/subject/bpplactx.html