【Golang】对使用接口实现多态的理解

大宝_5a8e · · 420 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

看【Go语言实战】这本书第二遍了,看第一遍的时候只是留下个印象,为了加深记忆以及方便回顾,把自己的理解写出来,仅供参考,Go Go Go,开始

定义

接口是用来定义行为的类型。这些被定义的行为不由接口直接实现,而是通过方法由用户 定义的类型实现。如果用户定义的类型实现了某个接口类型声明的一组方法,那么这个用户定 义的类型的值就可以赋给这个接口类型的值。这个赋值会把用户定义的类型的值存入接口类型 的值。

值接受者与指针接受者

1、如果参数类型是指针,那么在调用的时候也必须传递指针地址,因为编译器不是总能自动获取一个值的地址
2、如果参数类型是值,那调用的时候传值或者指针都可以,因为通过指针可以获取到对应的值


image.png
接口实现多态的方式

1、定义一个接口,接口中定义一个方法,所有想要实现该接口的类型,必须先实现接口中的方法
2、定义一个类型,并为该类型以接收者方式实现【步骤1】中的接口方法
3、声明一个多态方法,接收的参数类型为【步骤1】中定义的接口类型
4、调用该多态方法,并把【步骤2】中定义的类型作为参数传递给【步骤3】中声明的多态方法,由多态方法来调用接口方法

具体代码如下:
package main

func main() {
    u := user{
        "dabao",
        "baojun3@staff.weibo.com",
    }
    //调用多态方法notification
    notification(u)

    //嵌入类型 使用嵌入类型可以实现继承,admin中内部类型user的方法也被提升到了外部类型admin
    admin := admin{
        user{
            "张三",
            "zhangsan@aa.com",
        },
        "level",
    }
    notification(admin)
}

//定义一个接口
type notifier interface {
    notify()
}

//定义一个user类型
type user struct {
    name  string
    email string
}

//定义一个admin类型,将user类型嵌入
type admin struct {
    user
    level string
}

//user类型实现notifier接口
func (u user) notify() {
    println("通过接口实现多态调用notify方法:" + u.name)
}

//声明一个多态方法
func notification(n notifier) {
    n.notify()
}


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:大宝_5a8e

查看原文:【Golang】对使用接口实现多态的理解

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

420 次点击  
加入收藏 微博
上一篇:开发环境安装
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传