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

news2024/10/5 13:37:14

继承

  • 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()
}

输出

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

接口

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

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()

}

输出

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

总结

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

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

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

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

相关文章

股票自选(四)

4-自选 自选表功能,均需要使用 Token 令牌进行操作,目的是为了将数据隔离。 添加自选表的作用是进行推送, 将 自选表中的近十天的涨跌幅情况通过邮箱的方式推送给对应的用户。 一. 添加到自选表 接口描述: 接口地址:/StockApi/stockSele…

快速幂极简写法快速幂求逆元

快速幂原理介绍 快速幂模板 int qmi(int a, int k, int p) {int res 1;while (k) {//后面的a其实是底数与其指数的运算结果了,是不断迭代的//第一个a其实就是a的2的0次方if (k & 1) res (res * a) % p;a (a * a) % p;//注意,a是一个不断变化的过…

华为ac+fit无线2层漫游配置案例

ap的管理dhcp在ac上,业务dhcp在汇聚交换机上、并且带2层漫游 R1: interface GigabitEthernet0/0/0 ip address 11.1.1.1 255.255.255.0 ip route-static 12.2.2.0 255.255.255.0 11.1.1.2 ip route-static 192.168.0.0 255.255.0.0 11.1.1.2 lsw1: vlan batch 100…

深入理解Java虚拟机-GC

深入理解Java虚拟机-GC 当需要排查各种内存溢出、内存泄漏时,当垃圾回收成为系统到达更高并发量的瓶颈时,我们必须对内存动态分配和内存回收技术这样的“自动化”技术采用必要的监控和调节。 Java堆和方法区:一个接口的多个实现类需要的内存…

基于知识问答的上下文学习中的代码风格11.20

基于知识问答的上下文学习中的代码风格 摘要1 引言2 相关工作3 方法3.1 概述3.2 元函数设计3.3 推理 4 实验4.1 实验设置4.2 实施细节4.3 主要结果 摘要 现有的基于知识的问题分类方法通常依赖于复杂的训练技术和模型框架,在实际应用中存在诸多局限性。最近&#x…

优秀智慧园区案例 - 三亚市崖州湾科技城智慧园区,先进智慧园区建设方案经验

一、项目背景 三亚崖州湾科技城作为海南自贸港建设的重点园区,是重点推进的海南自贸港先导项目之一。崖州湾科技城全力抢抓有利时机,进一步拓宽发展思路,持续深化体制机制创新,牢牢把握“打造产学研城深度融合的聚集地”这一核心…

手把手带你在AutoDL上部署InternLM-Chat-7B Transformers

手把手带你在AutoDL上部署InternLM-Chat-7B Transformers 调用 项目地址:https://github.com/KMnO4-zx/self_llm.git 如果大家有其他模型想要部署教程,可以来仓库提交issue哦~ 也可以自己提交PR! InternLM-Chat-7B Transformers 部署调用 环…

Python爬虫技巧:百万级数据怎么爬取?

目录 前言 一、使用多线程/协程提高爬虫速度 1.1 使用多线程 1.2 使用协程 1.3 注意事项 二、使用代理IP解决目标网站限制爬虫的问题 三、使用分布式爬虫 四、其他一些小技巧 总结 前言 在实际的爬取过程中,我们经常会遇到一些需要大量爬取数据的情况&…

ConcurrentHashMap和HashMap的区别

HashMap相关知识点见主页博客:HashMap散列表的相关知识点-CSDN博客 目录 1、ConcurrentHashMap 2、ConcurrentHashMap和HashMap的区别 1、ConcurrentHashMap ConcurrentHashMap 是 Java 中的一个线程安全的哈希表实现,它是java.util.Map接口的一个具…

负载均衡Ribbon和Feign的使用与区别

Ribbon 的介绍 Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。主要功能是提供客户端的软件负载均衡和服务调用。Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer…

【python】Python生成GIF动图,多张图片转动态图,pillow

pip install pillow 示例代码: from PIL import Image, ImageSequence# 图片文件名列表 image_files [car.png, detected_map.png, base64_image_out.png]# 打开图片 images [Image.open(filename) for filename in image_files]# 设置输出 GIF 文件名 output_g…

深入理解JSON及其在Java中的应用

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

【docker】虚拟化和docker容器概念

基础了解 IAAS: 基础设施服务,(只提供基础设施,没有系统) **SAAS: ** 软件即服务,(提供基础设施和系统) PAAS: 平台即服务,(提供基…

哪个才是最适合你的 Web UI 自动化测试框架

最近,项目上出于系统性稳定性、减少测试工作量考虑,打算在 Web 前端引入 BDD。由于上一个项目写了一定的 Cucumber 代码(BDD 测试框架之一),这个框架选型的责任便落到了我的肩膀上了。 在我们进行框架选型的时候&#…

前端uniapp生成海报绘制canvas画布并且保存到相册【实战/带源码/最新】

目录 插件市场效果如下图注意使用my-share.vue插件文件如下图片hch-posterutilsindex.js draw-demo.vuehch-poster.vue 最后 插件市场 插件市场 效果如下图 注意 主要&#xff1a;使用my-share.vue和绘制canvas的hch-poster.vue这两个使用 使用my-share.vue <template&…

使用kafka_exporter监控Kafka

prometheus 监控 kafka 常见的有两种开源方案,一种是传统的部署 exporter 的方式,一种是通过 jmx 配置监控, 项目地址: kafka_exporter:https://github.com/danielqsj/kafka_exporterjmx_exporter:https://github.com/prometheus/jmx_exporter本文将采用kafka_exporter方…

win11,无法修改文件的只读属性,解决办法

在尝试更改文件或文件夹的权限时&#xff0c;您可能经常会遇到错误 - 无法枚举容器中的对象访问被拒绝。 虽然作为管理员&#xff0c;您可以更改访问权限&#xff0c;但有时即使是管理员也可能会遇到相同的错误消息。 这是一个常见错误&#xff0c;通常由不同论坛上的用户提出…

Web前端—移动Web第三天(移动Web基础、rem、less、综合案例—极速问诊)

版本说明 当前版本号[20231120]。 版本修改说明20231120初版 目录 文章目录 版本说明目录移动 Web 第三天01-移动 Web 基础谷歌模拟器屏幕分辨率视口二倍图适配方案 02-rem简介媒体查询rem 布局flexible.jsrem 移动适配 03-less注释运算嵌套变量导入导出禁止导出 04-综合案例…

【SA8295P 源码分析 (三)】132 - GMSL2 协议分析 之 GPIO/SPI/I2C/UART 等通迅控制协议带宽消耗计算

【SA8295P 源码分析】132 - GMSL2 协议分析 之 GPIO/SPI/I2C/UART 等通迅控制协议带宽消耗计算 一、GPIO 透传带宽消耗计算二、SPI 通迅带宽消耗计算三、I2C 通迅带宽消耗计算四、UART 通迅带宽消耗计算系列文章汇总见:《【SA8295P 源码分析 (三)】Camera 模块 文章链接汇总 -…

nvm管理node版本过程记录

写在前面 今天记录一下windows电脑安装nvm同时使用nvm管理node版本的&#xff0c;为什么写windows版本的呢&#xff1f;因为mac版本的基本上是不需要进行记录的&#xff0c;相对windows的安装是简单很多的&#xff0c;行了废话不多说&#xff0c;我们直接开始 安装nvm nvm下载…