• golang学习笔记——接口和继承比较1


    继承

    • Go 语言的设计之初,就不打算支持面向对象的编程特性,因此 Go 不支持面向对象的三大特性之一——继承。但是 Go 可以通过组合的思想去实现 “继承”。
    • 继承是面向对象的三大特性之一,继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
    • Go 语言里的“继承”体现如一个结构体拥有另一个结构体的的所有字段和方法,并在此基础上,定义新的字段和方法。

    代码

    import "fmt"
     
    type Person struct {
        Name string
        Age  int
    }
     
    func (p Person) Introduce() {
        fmt.Printf("大家好,我叫%s,我今年%d岁了。\n", p.Name, p.Age)
    }
     
    type Student struct {
        Person
        School string
    }
     
    func (s Student) GoToTheClass() {
        fmt.Println("去上课...")
    }
     
    func main() {
        student := Student{}
        student.Name = "小明"
        student.Age = 18
        student.School = "太阳系大学"
     
        // 执行 Person 类型的 Introduce 方法
        student.Introduce()
        // 执行自身的 GoToTheClass 方法
        student.GoToTheClass()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    输出

    大家好,我叫小明,我今年18岁了。
    去上课...
    
    • 1
    • 2

    接口

    在这里插入图片描述
    直接看代码

    package main
    import (
    	"fmt"
    )
    
    //Monkey结构体
    type Monkey struct {
    	Name string
    }
    
    //声明接口
    type BirdAble interface {
    	Flying()
    }
    
    type FishAble interface {
    	Swimming()
    }
    
    func (this *Monkey) climbing() {
    	fmt.Println(this.Name, " 生来会爬树..")
    }
    
    //LittleMonkey结构体
    type LittleMonkey struct {
    	Monkey //继承
    }
    
    
    //让LittleMonkey实现BirdAble
    func (this *LittleMonkey) Flying() {
    	fmt.Println(this.Name, " 通过学习,会飞翔...")
    }
    
    //让LittleMonkey实现FishAble
    func (this *LittleMonkey) Swimming() {
    	fmt.Println(this.Name, " 通过学习,会游泳..")
    }
    
    func main() {
    
    	//创建一个LittleMonkey 实例
    	monkey := LittleMonkey{
    		Monkey {
    			Name : "悟空",
    		},
    	}
    	monkey.climbing()
    	monkey.Flying()
    	monkey.Swimming()
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    输出

    悟空  生来会爬树..
    悟空  通过学习,会飞翔...
    悟空  通过学习,会游泳..
    
    • 1
    • 2
    • 3

    总结

    当A结构体继承了B结构体,那么A结构体就自动的继承了B结构体的字段和方法,并且可以直接使用。

    当A结构需要扩展功能,同时不希望去破坏继承关系,则可以去实现某个接口即可,因此我们可以认为:实现接口是对继承机制的补充。

  • 相关阅读:
    21年icpc上海区域赛B题Strange Permutations (容斥+生成函数)
    Leetcode.321 拼接最大数
    RD算法(一)—— 算法原理
    Python数组删除元素pop与remove对比
    岩土工程监测中振弦采集仪数据处理与解读的挑战与方法
    工业智能网关BL110应用之三十八: COM口如何配置采集Modbus协议设备
    web期末作业设计网页
    模板_整数二分
    智能指针介绍(C++)
    [补题记录] Atcoder Beginner Contest 297(F)
  • 原文地址:https://blog.csdn.net/e891377/article/details/134495494