Golang 实现接口和继承

这篇具有很好参考价值的文章主要介绍了Golang 实现接口和继承。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Golang 实现接口和继承,Go  方法和接口,golang

小猴子继承了老猴子,这样老猴子拥有的能力包括字段,方法就会自动的被老猴子继承。小猴子不需要做任何处理就可以拿到老猴子的字段和它的方法,因为是继承关系。

但是小猴子还会其他的技能,比如还会像小鸟一样飞翔,希望像鱼一样可以游泳。这样就可以通过实现的关系,通过实现接口的方式来增强小猴子的能力。

当一个结构体继承了另外一个结构体,那么这个结构体就拥有了继承结构体的字段和方法。如果这个结构体希望去扩展它的一些方法而不去破坏继承关系那么就可以通过实现的方式。

接口是对继承的一种补充。继承之后的新结构体实现了接口并不会去影响老的结构体。(其实也就是通过实现接口来扩展新的结构体的功能,这样并没有影响老的结构体以及其继承关系)

在不去破坏继承关系的基础上,对结构体功能进行扩展。其实就是解藕的方式去扩展结构体的功能。

package main
import "fmt"

type Monkey struct {
	Name string
}

// 给monkey结构体绑定了一个方法叫做climbing
func (m *Monkey) climbing() {
	fmt.Println(m.Name, "生来会爬树")
}

type Bird interface {
	Flying()
}

type Fish interface {
	Swimming()
}

type LittleMonkey struct {
	Monkey //继承关系
}

func (l *LittleMonkey) Flying() {
	fmt.Println(l.Name, "会飞")
}

func (l *LittleMonkey) Swimming() {
	fmt.Println(l.Name, "会游泳")
}

func main() {
	lm := &LittleMonkey{
		Monkey{
			Name: "悟空",
		},
	}

	lm.climbing()
	lm.Flying()
	lm.Swimming()
}

悟空 生来会爬树
悟空 会飞
悟空 会游泳

对上面代码的小结:

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

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

Golang 实现接口和继承,Go  方法和接口,golang

现在要求足球运动员和大学生掌握英语这个技能。

第一种方式就是将学语言这个技能这个方法放到运动员结构体里面去。但是篮球运动员不需要掌握这个英语技能。所以直接将方法写到运动员结构体这个地方是不合理的。

所以这里需要去定义一个接口,让需要实现接口的结构体去实现即可,这样不会影响到其他的结构体,解藕了。

这样不破坏继承关系,同时还可以保障规范性。

Golang 实现接口和继承,Go  方法和接口,golang

实现接口vs继承

>接口和继承解决的问题不同

继承的价值主要在于:解决代码的复用性(可以让结构体去继承另外一个结构体,这样重复的代码就不需要再去写了)和可维护性(被继承的结构体增加一个方法,其他的结构体就拥有了字段和方法)。

接口的价值主要在于:设计,设计好各种规范(方法),让其它自定义类型去实现这些方法。

>接口比继承更加灵活

接口比继承更加灵活,继承是满足is-a的关系,而接口只需满足like-a的关系。

接口在一定程度上实现代码解耦文章来源地址https://www.toymoban.com/news/detail-725876.html

到了这里,关于Golang 实现接口和继承的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Golang | reflect】利用反射实现方法的调用

    go语言中,如果某个数据类型实现了一系列的方法,如何批量去执行呢,这时候就可以利用反射里的 func (v Value) Call(in []Value) []Value 方法。 Call 方法实际使用时主要有以下两种调用方式: 注: 1、这里说明下,为什么使用 Func 调用 Call 时第一个入参是对应receiver本身 method.Func

    2024年02月07日
    浏览(56)
  • go 结构体 - 值类型、引用类型 - 结构体转json类型 - 指针类型的种类 - 结构体方法 - 继承 - 多态(interface接口) - 练习

    目录 一、结构体 1、python 与 go面向对象的实现: 2、初用GO中的结构体:(实例化一个值类型的数据(结构体)) 输出结果不同的三种方式  3、实例化一个引用类型的数据(结构体) 4、引用类型(指针类型) vs 值类型(两者的区别) 引用类型(指针类型) - 值类型内存拓扑图:

    2024年02月14日
    浏览(55)
  • 组件分享之后端组件——基于Golang实现的全局的、版本化的、点对点的文件系统go-ipfs...

    近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。 组件: go-ipfs 开源协议:The go-ipfs project is dual-licensed under Apache 2.0 and MIT terms: Ap

    2024年02月01日
    浏览(43)
  • 【Golang】Golang进阶系列教程--Go 语言数组和切片的区别

    在 Go 语言中,数组和切片看起来很像,但其实它们又有很多的不同之处,这篇文章就来说说它们到底有哪些不同。 数组和切片是两个常用的数据结构。它们都可以用于存储一组相同类型的元素,但在底层实现和使用方式上存在一些重要的区别。 Go 中数组的长度是不可改变的

    2024年02月15日
    浏览(61)
  • 【Golang】Golang进阶系列教程--Go 语言 map 如何顺序读取?

    Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。 然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。 先看一段代码示例: 当我们多执行几次这段代码时,就会发现,输出的顺序是不同的。 首先,Go 语言

    2024年02月14日
    浏览(71)
  • 【Golang】Golang进阶系列教程--Go 语言切片是如何扩容的?

    在 Go 语言中,有一个很常用的数据结构,那就是切片(Slice)。 切片是一个拥有相同类型元素的可变长度的序列,它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。 切片是一种引用类型,它有三个属性:指针,长度和容量。 底层源码定义如下: 指针: 指向

    2024年02月14日
    浏览(72)
  • 【Golang】go条件编译

    交叉编译只是为了能在一个平台上编译出其他平台可运行的程序,Go 作为一个跨平台的语言,它提供的类库势必也是跨平台的,比如说程序的系统调用相关的功能,能根据所处环境选择对应的源码进行编译。让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,

    2024年02月11日
    浏览(60)
  • 【Golang】go交叉编译

    交叉编译是用来在一个平台上生成另一个平台的可执行程序 。Go 命令集是原生支持交叉编译的。 Mac下编译:Linux 或 Windows 的可执行程序 Linux下编译:Mac 或 Windows的可执行程序 Windows下编译:Mac 或 Linux的可执行程序 需要写一个批处理程序,在里面去设置,因为windows 下的 ter

    2024年02月10日
    浏览(46)
  • Golang:Go语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 表达式 注释 接下来让我们来看下简单的代码,该代码输出了\\\"Hello World!\\\": 让我们来看下以上程序的各个部分: 第一

    2024年02月10日
    浏览(59)
  • 【golang】每日chatGPT:golang中实现ENUM枚举类型 | go enum

    在golang极简的哲学思想中,没有内置枚举类型 这里我们通过map+iota去实现一个枚举类型 枚举值如下: key value 1 发电类 2 储能类 13 负荷类 打印如下: 发电类 储能类 负荷类 ========= 储能类

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包