Golang 实现接口和继承

news2024/11/26 16:41:21

小猴子继承了老猴子,这样老猴子拥有的能力包括字段,方法就会自动的被老猴子继承。

小猴子不需要做任何处理就可以拿到老猴子的字段和它的方法,因为是继承关系。

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

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

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

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

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结构体需要扩展功能,同时不希望去破坏继承关系,则可以去实现某个接口即可,因此我们可以认为:实现接口是对继承机制的补充!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1089386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国际减灾日 | 智慧减灾——百分点科技的数据科学视角

国际减轻自然灾害日简称“国际减灾日”,由联合国于1989年设立,旨在关注全球灾害风险,呼吁各国政府、组织和个人积极参与减灾工作,以保护人民生命财产安全。今年10月13日是第34个国际减灾日,主题为“共同打造有韧性的未…

卫星影像如何插入到AutoCAD使用

工具 Bigemap gis office地图软件 BIGEMAP GIS Office-全能版 Bigemap APP_卫星地图APP_高清卫星地图APP 第一步: 首先需要下载影像,选择一个区域下载,影像下载方式有以下几种: 那么通过下载方式选择好了范围以后,选…

【C++】-c++11的知识点(中)--lambda表达式,可变模板参数以及包装类(bind绑定)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

基于Labview的噪声采集分析系

目录 摘 要......................................................................................................................... 3 第一章 绪论.............................................................................................................…

印尼全面禁止直播带货

我是卢松松,点点上面的头像,欢迎关注我哦! 电商的改变要来了? 印尼为了保护中小企业全面禁止电商,原因是:电商富的是少数人,只有实体才能带动经济。另外除了印尼,马来西亚、越南也要审查直播…

html设置前端加载动画

主体思路参考: 前端实现页面加载动画_边城仔的博客-CSDN博客 JS图片显示与隐藏案例_js控制图片显示隐藏-CSDN博客 1、编写load.css /* 显示加载场景 */ .loadBackGround{position: absolute;top: 0px;text-align: center;width: 100%;height: 100vh;background-c…

十六、【橡皮擦工具组】

文章目录 橡皮擦背景橡皮擦1. 一次取样2. 连续取样3. 取样背景色板 魔术橡皮擦 橡皮擦 橡皮擦跟我们平常生活中所用的橡皮擦是一样,它是将图层的内容擦除,只剩下空白部分。另外当我们按住Alt的键去擦除空白部分的时候,也可以将背景的部分显示出来。 另…

第三章 内存管理 二、内存管理的概念

目录 一、内存空间的分配与回收 内存空间的分配: 内存空间的回收: 二、内存空间的扩充 四、存储保护 五、总结 一、内存空间的分配与回收 内存空间的分配和回收是程序设计中非常重要的一环。这里简要介绍下内存空间的分配和回收。 内存空间的分配: 静态分配…

JVM 性能调优参数

JVM分为堆内存和非堆内存 堆的内存分配用-Xms和-Xmx -Xms分配堆最小内存,默认为物理内存的1/64; -Xmx分配最大内存,默认为物理内存的1/4。 非堆内存分配用-XX:PermSize和-XX:MaxPermSize -XX:PermSize分配非堆最小内存,默认为物理…

LeetCode【46】全排列

题目: 代码: 在这里插入代码片

LeetCode刷题总结 - LeetCode 热题 100 - 持续更新

LeetCode 热题 100 其他系列哈希1. 两数之和49. 字母异位词分组128. 最长连续序列 双指针27. 移除元素283. 移动零11. 盛最多水的容器剑指 Offer II 007. 数组中和为 0 的三个数42. 接雨水 滑动窗口438. 找到字符串中所有字母异位词3. 无重复字符的最长子串 字串560. 和为 K 的…

十四、【图章工具组】

文章目录 仿制图章图案图章 仿制图章 纺织图和章工具跟我们之前所用到的修补工具类似,需要我们先按住Alt键选住一块区域,然后调整它的硬度在用我们选择的区域去覆盖,需要注意的是,我们去做的时候尽量一笔覆盖我们想要遮住的区域: 图案图章…

BUUCTF 你竟然赶我走 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件后有一张图片。 密文: 解题思路: 有两种解题方法 方法一: 1、使用StegSolve打开图片。 2、打开File Format(文件格式) 3、拉到最下面&#…

国外互联网巨头常用的项目管理工具揭秘

大型互联网公司有涉及多个团队和利益相关者的复杂项目。为了保持项目的组织性和效率,他们中的许多人依赖于项目管理工具。这些工具有助于跟踪任务,与团队成员沟通,并监控进度。让我们来看看一些大型互联网公司正在使用的项目管理工具。 1、Zo…

Flink之DataStream API开发Flink程序过程与Flink常见数据类型

开发Flink程序过程与Flink常见数据类型 DataStream APIFlink三层APIDataStream API概述 开发Flink程序过程添加依赖创建执行环境执行模式创建Data Source应用转换算子创建Data Sink触发程序执行示例 Flink常见数据类型基本数据类型字符串类型时间和日期类型数组类型元组类型列表…

【Java 进阶篇】深入了解JavaScript中的函数

函数是JavaScript编程中的核心概念之一。它们是可重用的代码块,可以帮助您组织和管理程序,使您的代码更具可读性和可维护性。在本篇博客中,我们将深入了解JavaScript中的函数,包括函数的基本语法、参数、返回值、作用域、闭包和高…

网安朝阳·西门子白帽黑客大赛 | 聚焦实战攻防竞赛 促进网安人才发展

2023年10月12日,由西门子(中国)有限公司、北京市朝阳区人民政府主办,西门子医疗系统有限公司作为赞助单位,北京赛宁网安科技有限公司(赛宁网安)、北京精典元素公关顾问有限公司承办,…

进程概念[上]

一、冯诺依曼体系结构 冯 • 诺依曼体系结构核心原理为:用户输入的数据先放到内存当中,CPU 读取数据的时候就直接从内存当中读取,CPU 处理完数据后又写回内存当中,然后内存再将数据输出到输出设备当中,最后由输出设备进…

【已解决】HTTP method names must be tokens

该接口应该是http,但是在平台中的填写成https,导致的问题,所以将对应的接口修改为http即可

C#面对对象(英雄联盟人物管理系统)

目录 英雄信息类 因为要在两个窗体里面调用字典,所以要写两个类来构建全局变量 添加功能 查询功能 英雄信息类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp…