zoukankan      html  css  js  c++  java
  • 多态

    • 多态:同一件事情由于条件不同产生的结果不同

    • 由于Go语言中结构体不能相互转换,所以没有结构体(父子结构体)的多态,只有基于接口的多态.这也符合Go语言对面向对象的诠释

    • 多态在代码层面最常见的一种方式是接口当作方法参数

    代码示例

    • 结构体实现了接口的全部方法,就认为结构体属于接口类型,这是可以把结构体变量赋值给接口变量

    • 重写接口时接收者为Type*Type的区别

      • *Type可以调用*TypeType作为接收者的方法.所以只要接口中多个方法中至少出现一个使用*Type作为接收者进行重写的方法,就必须把结构体指针赋值给接口变量,否则编译报错

      • Type只能调用Type作为接收者的方法

    type Live interface {
        run()
        eat()
    }
    type People struct {
        name string
    }
    
    func (p *People) run() {
        fmt.Println(p.name, "正在跑步")
    }
    func (p People) eat() {
        fmt.Println(p.name, "在吃饭")
    }
    
    func main() {
        //重写接口时
        var run Live = &People{"张三"}
        run.run()
        run.eat()
    }
    • 既然接口可以接收实现接口所有方法的结构体变量,接口也就可以作为方法(函数)参数
    type Live interface {
        run()
    }
    type People struct{}
    type Animate struct{}
    
    func (p *People) run() {
        fmt.Println("人在跑")
    }
    func (a *Animate) run() {
        fmt.Println("动物在跑")
    }
    
    func sport(live Live) {
        fmt.Println(live.run)
    }
    
    func main() {
        peo := &People{}
        peo.run() //输出:人在跑
        ani := &Animate{}
        ani.run() //输出:动物在跑
    }
  • 相关阅读:
    【随手记】常用16进制代表的容量或位置
    精通css——position属性
    Ubuntu安装GitLab
    Linux内核
    分布式(一)——分布式系统的特性
    【树莓派】入门
    Intel CPU发展历史
    C++读mnist数据
    实验代码一:用来链表实现单向图
    Hadoop配置+centos6.5
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/12421708.html
Copyright © 2011-2022 走看看