• go语言多态实现


    前言

            在 Go 语言中,interface中可以定义多种方法,这些方法可以由不同的接收器(即不同的结构体类型)实现。接口是一种定义,它不关心方法的具体实现,只要求实现接口的类型提供了接口声明的所有方法

            每个类型可以实现接口的所有方法,或者只实现接口的一部分方法。如果一个类型实现了接口的所有方法,那么它就完全满足了该接口;如果只实现了部分方法,那么它只部分满足了该接口,但仍然可以被看作是该接口的一个实现。如果希望一个类型实现某个接口的部分方法,而另一个类型实现该接口的剩余方法,可以通过组合(composition)的方式来实现,允许将一个类型的实例作为另一个类型的字段来复用代码和接口的实现。

            在 Go 语言中多态性主要是通过接口和组合来实现的。接口定义了一组方法的契约,而组合允许一个类型在内部包含(或组合)另一个类型的值,从而实现代码复用和多态性。以下是通过组合实现多态性的几个关键步骤:

    一、组合实现接口

    1. package main
    2. import "fmt"
    3. // 定义一个接口
    4. type Interface interface {
    5. Method1()
    6. Method2()
    7. }
    8. // 第一个类型实现了接口的部分方法
    9. type Type1 struct{}
    10. func (t *Type1) Method1() {
    11. fmt.Println("Method1 is implemented by Type1")
    12. }
    13. // 第二个类型包含了第一个类型,并尝试实现剩余的方法
    14. type Type2 struct {
    15. Type1
    16. }
    17. func (t *Type2) Method2() {
    18. fmt.Println("Method2 is implemented by Type2")
    19. }
    20. func main() {
    21. // 由于 Type2 包含了 Type1,它间接地实现了 Method1
    22. // 同时它自己实现了 Method2,所以 Type2 实现了 MyInterface
    23. var myInterface Interface = &Type2{}
    24. myInterface.Method1() // 输出: Method1 is implemented by Type1
    25. myInterface.Method2() // 输出: Method2 is implemented by Type2
    26. }

    第一个类型实现了interface中的部分方法,第二个类型中包含了第一个类型并实现了interface中剩余的方法,因此第二个类型了interface中的全部方法。

    二、通过组合实现多态

    1. package main
    2. import (
    3. "fmt"
    4. )
    5. // Animal 接口声明了多种方法
    6. type Animal interface {
    7. Eat() string
    8. Sleep() string
    9. Play() string
    10. }
    11. // Pet 是一个基础类型,实现了 Animal 接口的部分方法
    12. type Pet struct{}
    13. func (p Pet) Eat() string {
    14. return "Eating kibble."
    15. }
    16. func (p Pet) Sleep() string {
    17. return "Sleeping soundly."
    18. }
    19. // Dog 是一个包含 Pet 类型的类型,实现了 Animal 接口的剩余方法
    20. type Dog struct {
    21. Pet
    22. Name string
    23. }
    24. func (d Dog) Play() string {
    25. return d.Name + " is playing fetch."
    26. }
    27. // Cat 是另一个包含 Pet 类型的类型,实现了 Animal 接口的剩余方法
    28. type Cat struct {
    29. Pet
    30. Name string
    31. }
    32. func (c Cat) Play() string {
    33. return c.Name + " is playing with a ball of yarn."
    34. }

    在interface中声明了多个方法,在一个基础类型中实现了部分方法, 其它类型包含了这个基础类型并各自实现了interface中剩余的方法,即通过组合方式实现多态功能。

  • 相关阅读:
    【654. 最大二叉树】
    【JMeter接口测试工具】第二节.JMeter基本功能介绍(上)【入门篇】
    齐岳|阿霉素/四氧化三铁纳米粒微球|钆参杂四氧化三铁Fe3O4复合纳米粒子
    Kong网关命令详解
    计算机算法分析与设计(20)---回溯法(0-1背包问题)
    案例成果展 | 灵雀云助力中国人民银行清算总中心构建裸金属容器平台
    浅谈如何解决公共组件父子组件依赖调用和子组件校验父组件条件的问题
    第八篇、线程优先级和守护线程
    Js逆向教程17-极验滑块 实现加密算法的逻辑
    基于PHP+MySQL游戏视频网站的设计与实现
  • 原文地址:https://blog.csdn.net/canyuemanyue/article/details/140968461