美文网首页
Go语言结构体内嵌模拟类的继承

Go语言结构体内嵌模拟类的继承

作者: 码二哥 | 来源:发表于2020-02-10 15:27 被阅读0次

    参考:
    http://c.biancheng.net/view/73.html

    关键点

    希望通过下面的关键词,能够实现目的:能够快速回忆理解复习 知识点:

    1、在Go语言里,如何实现其他语言如Java中的继承特性呢?

    利用Go语言中的内嵌结构体特性,可以方便快速的组合成不同特性。

    在面向对象思想中,实现对象关系需要使用“继承”特性。

    例如,人类不能飞行,鸟类可以飞行。人类和鸟类都可以继承自可行走类,但只有鸟类继承自飞行类。

    面向对象的设计原则中也建议对象最好不要使用多重继承,有些面向对象语言从语言层面禁止多重继承,如 C# 和 Java语言。

    鸟类同时继承自可行走类和飞行类,这显然是存在问题的。

    在面向对象思想中要正确地实现对象的多重特性,只能使用一些精巧的设计来补救。

    Go语言的结构体内嵌特性就是一种组合特性,使用组合特性可以快速构建对象的不同特性。

    下面的代码使用Go语言的结构体内嵌实现对象特性组合,请参考下面的代码。

    人和鸟的特性:

    package main
    import "fmt"
    // 可飞行的
    type Flying struct{}
    func (f *Flying) Fly() {
        fmt.Println("can fly")
    }
    // 可行走的
    type Walkable struct{}
    func (f *Walkable) Walk() {
        fmt.Println("can calk")
    }
    // 人类
    type Human struct {
        Walkable // 人类能行走
    }
    // 鸟类
    type Bird struct {
        Walkable // 鸟类能行走
        Flying   // 鸟类能飞行
    }
    func main() {
        // 实例化鸟类
        b := new(Bird)
        fmt.Println("Bird: ")
        b.Fly()
        b.Walk()
        // 实例化人类
        h := new(Human)
        fmt.Println("Human: ")
        h.Walk()
    }
    

    代码说明如下:

    • 第 6 行,声明可飞行结构(Flying)。
    • 第 8 行,为可飞行结构添加飞行方法 Fly()。
    • 第 13 行,声明可行走结构(Walkable)。
    • 第 15 行,为可行走结构添加行走方法 Walk()。
    • 第 20 行,声明人类结构。这个结构嵌入可行走结构(Walkable),让人类具备“可行走”特性
    • 第 25 行,声明鸟类结构。这个结构嵌入可行走结构(Walkable)和可飞行结构(Flying),让鸟类具备既可行走又可飞行的特性。
    • 第 33 行,实例化鸟类结构。
    • 第 35 和 36 行,调用鸟类可以使用的功能,如飞行和行走。
    • 第 39 行,实例化人类结构。
    • 第 41 行,调用人类能使用的功能,如行走。

    运行代码,输出如下:

    Bird:
    can fly
    can calk
    Human:
    can calk
    

    使用Go语言的内嵌结构体实现对象特性,可以自由地在对象中各种特性。

    Go语言会在编译时检查能否使用这些特性。

    相关文章

      网友评论

          本文标题:Go语言结构体内嵌模拟类的继承

          本文链接:https://www.haomeiwen.com/subject/debaxhtx.html