首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Go语言之接口(二十)

Go语言之接口(二十)

作者头像
友儿
发布2022-09-11 14:07:38
发布2022-09-11 14:07:38
17600
代码可运行
举报
文章被收录于专栏:友儿友儿
运行总次数:0
代码可运行

Go语言之接口(二十)

特性

  • 定义: 公共方法组合起来以封装特定功能的一个集合
  • 多态: 接口的多种实现方式

接口声明

如何实现接口

目录结构

代码语言:javascript
代码运行次数:0
运行
复制
  ├── demo
  │    └── demo.go
  ├── go.mod
  ├── interface_demo
  │     └── interface_demo.go
  └── main.go

定义接口intreface_demo.go文件

代码语言:javascript
代码运行次数:0
运行
复制
    package interface_demo
    
    type Behavior interface {  //定义接口
        Run() string           //定义方法
        Eat() string
    }

demo.go文件实现接口文件

代码语言:javascript
代码运行次数:0
运行
复制
        package demo
        import "fmt"
        type Animal struct {//父级结构体
            Colour string   //父级结构体属性
        }
        type Dog struct {   //Dog 结构体
            Animal          //Dog 结构体包含了Animal结构体的属性和方法
            ID int
            Name string
            Age int
        }
        type Cat struct {    //Cat 结构体
            Animal           //Cat 结构体包含了Animal结构体的属性和方法
            ID int
            Name string
            Age int
        }
        func (d *Dog)Run() string {//Dog结构体的Run方法(实现了interface_demo.go文件中的Run()方法)
            fmt.Println("ID:",d.ID,"DOG is running")
            return "DOG is running"
        }
        func (a *Animal)Eat() string {//Animal结构体的Run方法(实现了interface_demo.go文件中的Eat()方法)
            fmt.Println("yu yu yu yu")
            return "yu yu yu yu"
        }
        func (c *Cat)Run() string {//Cat结构体的Run方法(实现了interface_demo.go文件中的Run()方法)
            fmt.Println("ID:",c.ID,"Cat is running")
            return "Cat is running"
        }

main.go文件调用

代码语言:javascript
代码运行次数:0
运行
复制
    package main
    
    import (
        "./demo"
        "./interface_demo"
        "fmt"
    )
    func main()  {
        dog := new(demo.Dog)
        dog.ID = 1
        dog.Name = "dog"
        dog.Age = 5
        dog.Colour = "red"     //继承了Animal的属性
        dog.Eat()              //继承了Animal的方法       yu yu yu yu
        fmt.Println("\r")
        fmt.Println(dog)       //&{{red} 1 dog 5}
        fmt.Println("\r")
        //cat
        cat := new(demo.Cat)
        cat.ID = 2
        cat.Name = "cat"
        cat.Age = 6
        cat.Colour = "red11"   //继承了Animal的属性
        cat.Eat()              //继承了Animal的方法       yu yu yu yu
        fmt.Println("\r")
        fmt.Println(cat)       //&{{red11} 2 cat 6}
        fmt.Println("\r")
        //接口定义变量
        dog1 := new(demo.Dog) //赋值的时候创建一个结构体
        cat1 := new(demo.Cat) //赋值的时候创建一个结构体
        action(dog1)          //ID:1 Dog is running   调用的是Dog类的Run()方法
        action(cat1)          //ID:2 Cat is running   调用的是Cat类的Run()方法
    }
    
    func action(b interface_demo.Behavior)string  {//声明了一个接口
        b.Run()
        return ""
    }

**注意:** 只有同时实现了interface_demo.go文件中的Run()和Eat()方法,才会隐式实现接口interface_demo.go 声明了一个接口,赋值的时候创建一个结构体,则调用的方法是该结构体的方法

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何实现接口
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档