• golang学习笔记——面向对象(接口)


    接口
    • 定义及使用
    package main
     
    import (
        "fmt"
    )
     
    //定义一个接口
    type Human interface {
        sayHello()
    }
     
    type Student struct {
        name string
        age  int
    }
     
    type Teacher struct {
        group string
    }
     
    func (stu *Student) sayHello() {
        fmt.Printf("Student[%s,%d] ", stu.name, stu.age)
    }
     
    func (tea *Teacher) sayHello() {
        fmt.Printf("Teacher[%s] ", tea.group)
    }
     
    func WhoSay(tmp Human) {
        tmp.sayHello()
    }
     
    func main() {
        //第一种使用
        s := &Student{"Bon", 12}
        t := &Teacher{"math"}
     
        WhoSay(s)
        WhoSay(t)
     
        //第二种使用 创建切片
        slic := make([]Human, 2)
        slic[0] = s
        slic[1] = t
        for _, v := range slic {
             v.sayHello()
        }
    }
    • 接口继承
    package main
     
    import (
    "fmt"
    )
     
    //定义一个接口
    type Humaner interface {
        sayHello()
    }
    //继承Humaner
    type Personer interface {
        Humaner
        sayWorld(str string)
    }
     
    type Student struct {
        name string
        age  int
    }
     
    func (stu *Student) sayHello() {
        fmt.Printf("Student[%s,%d] ", stu.name, stu.age)
    }
     
    func (stu *Student) sayWorld(str string) {
        fmt.Println(str)
    }
     
    func main() {
        var i Personer
        s := &Student{"Bob", 23}
        i = s
        i.sayHello()
        i.sayWorld("song")
    }
    • 接口转化(超集可以转化为子集,子集不可以转化为超集
    package main
     
    import (
        "fmt"
    )
     
    //定义一个接口
    type Humaner interface { //子集
        sayHello()
    }
     
    type Personer interface { //超集
        Humaner
        sayWorld(str string)
    }
     
    type Student struct {
        name string
        age  int
    }
     
    func (stu *Student) sayHello() {
        fmt.Printf("Student[%s,%d] ", stu.name, stu.age)
    }
     
    func (stu *Student) sayWorld(str string) {
        fmt.Println(str)
    }
     
    func main() {
        var i Personer
     
        i = &Student{"Tom", 16}
     
        var h Humaner
        //子集不能转为超集
        // i = h
     
        //超集可以转化为子集
        h = i
        h.sayHello()
     
    }
    • 空接口(可以保存任意类型的数据)
    package main
     
    import (
    "fmt"
    )
     
    func xxx(arg ...interface{}) {
     
    }
     
    func main() {
        //空接口可保存任意类型的数据
        var i interface{}
        i = 10
        fmt.Println(i)
     
        var m interface{}
        m = "hello world"
        fmt.Println(m)
    }
    • 判断空接口存储的数据类型
    package main
     
    import (
        "fmt"
    )
     
    func main() {
        var i interface{}
        i = 10
     
        //使用 变量.(类型) 判断数据数据类型
        if value, ok := i.(int); ok == true {
             fmt.Println(value)
        }
     
    }
    package main
     
    import (
        "fmt"
    )
     
    func main() {
        var i interface{}
        i = 10
     
        //使用 变量.(type) 判断数据数据类型
        switch value := i.(type) {
            case int:
                 fmt.Printf("int 类型 %d ", value)
            case string:
                 fmt.Print("string 类型 %s ", value)
        }
    }
  • 相关阅读:
    java核心学习(八) 枚举类
    java核心学习(七) 内部类、匿名内部类、Lambda表达式
    算法-快速排序
    java核心学习(六) 面向接口编程
    java核心学习(五) 修饰符(重点是static、final)
    java 核心学习笔记(四) 单例类
    贪心 zoj3197
    贪心 poj3045
    三分 POJ3737
    浮点数二分答案 HDU1969
  • 原文地址:https://www.cnblogs.com/itsuibi/p/14459179.html
Copyright © 2020-2023  润新知