非零基础自学Golang 第12章 接口与类型 12.3 接口嵌入

news2024/11/19 10:27:29

非零基础自学Golang

文章目录

      • 非零基础自学Golang
      • 第12章 接口与类型
        • 12.3 接口嵌入

第12章 接口与类型

12.3 接口嵌入

接口嵌入,也叫接口组合,在其他语言中,这种接口的组合叫作继承;Go语言舍弃了繁杂的继承体系,但继承这个特性还是通过接口嵌入得以实现了。【行的】

接口嵌入也就是指如果一个接口interface1作为interface2的一个嵌入字段,那么interface2隐式包含了interface1里面所有的方法,

例如动手写12.3.1

[ 动手写 12.3.1]

package main

type interface1 interface {
   Method()
}

type interface2 interface {
   interface1
}

在这里插入图片描述

接口嵌入同样体现了非侵入式的风格,关于非侵入式,后面再细说。

关于接口嵌套需要注意:首先,一个接口类型只接受其他的接口类型的嵌入,嵌入结构体或其他类型则会报错;其次,一个接口类型不能嵌入自身,这包括直接嵌入和间接嵌入。

直接嵌入如下:

[动手写 12.3.2]

package main

type interface1 interface {
   interface1
}

在这里插入图片描述

间接嵌入如下:

[ 动手写 12.3.3]

package main

type interface1 interface {
   interface2
}

type interface2 interface {
   interface3
}

type interface3 interface {
   interface1
}

在这里插入图片描述

动手写12.3.2和动手写12.3.3都会报“invalid recursive type”的错误。

我们来看一个完整的例子:

[ 动手写 12.3.4]

package main

import "fmt"

type IPerson interface {
   Speak()
}

type IStudent interface {
   IPerson
   Study()
}

type ITeacher interface {
   IPerson
   Teach()
}

type Student struct {
   Name string
}

func (s *Student) Speak() {
   fmt.Println("My name is ", s.Name)
}

func (s *Student) Study() {
   fmt.Println(s.Name, " is studying")
}

type Teacher struct {
   Name string
}

func (t *Teacher) Speak() {
   fmt.Println("My name is ", t.Name)
}

func (t *Teacher) Teach() {
   fmt.Println(t.Name, " is teaching")
}

func main() {

   var stu Student = Student{"Xiao Ming"}
   var teacher Teacher = Teacher{"Mr. Li"}

   stu.Speak()
   stu.Study()

   teacher.Speak()
   teacher.Teach()
}

运行结果

在这里插入图片描述

动手写12.3.4定义了三个接口:IPerson、IStudent、ITeacher。

其中IStudent和ITeacher都嵌入了IPerson接口,可以理解为IStudent和ITeacher都继承了IPerson接口,都拥有了IPerson接口中的Speak()方法;而结构体Teacher要实现ITeacher接口,则同时需要实现IPerson接口才行。

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

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

相关文章

48页智慧城市大数据可视化平台建设方案

目 录 1. 概述 1.1 需求分析 1.2 采取策略 1.3 方案目标 2. 智慧城市解决方案 2.1 架构说明 2.1.1 整体架构 2.1.2 规划架构 2.1.3 云平台架构 2.2 建设内容 2.2.1 云计算公共支撑平台 2.2.2 智慧规划 2.2.3 智慧管网 2.2.4 智能政务 2.2.5 智慧交通 2.2.6 智慧…

两台笔记本之间快速传输文件,两台电脑之间快速传输大量文件

想用自己的笔记本电脑给同事的电脑传文件,却发现自己和同事都没有带U盘和数据线,怎么办?两台笔记本之间快速传输文件?接下来介绍的方法你可能用得到。 方案一、微信、QQ传输文件 简单的方法就是两台电脑都登陆聊天工具&#xff0…

小学生C++编程基础 课程7(B)

904.等差数列 (课程7) 登录 905.双等差数列 (课程7) 登录 906.打印数列1 (课程7) 登录 907.打印数列2 (课程7) 难度:1 登录 908.对称数列 (课程7) 登录 909.个位数是7 (课程7) 登录 910.打印数列3 (课程7) 登录…

【AI理论学习】n-gram语言模型和神经网络语言模型

n-gram语言模型和神经网络语言模型什么是语言模型语言模型的计算什么是n-gram模型n-gram平滑技术什么是神经网络语言模型(NNLM)?基于前馈神经网络的模型基于循环神经网络的模型语言模型评价指标总结参考资料什么是语言模型 语言模型是自然语…

重磅!张文宏最新防治指南来了!

文 | 闲欢来源:Python 技术「ID: pythonall」最近全国各地最热门的话题恐怕都是跟“羊”有关的了。混乱时期两周之前,在所有人猝不及防的情况下,国家宣布放开疫情防控。从此我们再也不用每天排队做核酸,上班或者出去完也不用处处设…

二维Poisson方程五点差分格式与Python实现

最近没怎么写新文章,主要在学抽象代数下学期还有凸分析好累的一学期哦对,我不是数学系的,我是物理系的。而且博主需要澄清一下,博主没有对象,至少现在还没有。好,兄弟们,好习惯,先上…

SSM鹊巢大连分公司分销商管理系统

开发工具(eclipse/idea/vscode等):idea 数据库(sqlite/mysql/sqlserver等):mysql 功能模块(请用文字描述,至少200字):、主要功能 一、:人员管理:自己派遣到各个地区的员工,也就是分销商&#xf…

Java平衡树之红黑树代码实现过程详解(2)

红黑树 前面介绍了2-3树,可以看到2-3树能保证在插入元素之后,树依然保持平衡状态,它的最坏情况下所有子结点都是2-结点,树的高度为lgN,相比于我们普通的二叉查找树,最坏情况下树的高度为N,确实保证了最坏情…

药学专业转行软件测试,真的可以月薪过万吗?

转行原因 我在大学里学的是药学专业,毕业之后也顺利从事了对口的工作——药物分析。工作很稳定,但是内容很繁琐,薪资也一般,但从我自己内心来说从来没有开心过,因为我不想从事这样枯草并且一眼就可以看到老的人生。 …

常见的DDoS攻击方式和预防方法

DDoS攻击指分布式拒绝服务攻击,即处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。以下是三种常见的DDoS攻击方式: 1.TCP洪水攻击(SYN …

ADI Blackfin DSP处理器-BF533的开发详解65:JPEG解码(含源码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 代码实现功能 代码实现了将 480*272 尺寸的 JPEG 数据解码为 RGB888 数据功能,调用了 JPEG 解码库函数。 JPEG 图像数据以.dat 文件…

FineReport报表工具制作图表-JS实现下拉框选择后复选框默认全选

1. 概述 1.1 预期效果 参数联动查询时,希望下拉框选择后,复选框可以跟着选中全部所有参数值,效果如下图所示: 1.2 实现思路 参数联动查询时,希望下拉框选择后,复选框可以跟着选中全部所有参数值给下拉框添…

六、http模块

HTTP —— 超文本传输协议,用于规范客户端浏览器和服务端以何种格式进行通信和数据交互;HTTP由请求和响应构成的,是一个标准的客服端服务器模型。 HTTP请求响应过程 先简单的来了解以下HTTP的请求响应过程:1.地址解析&#xff1a…

深度学习实验(四)——卷积神经网络编程

深度学习实验四:卷积神经网络编程 本次实验练习使用torch.nn中的类设计一个卷积神经网络进行MNIST手写体数字图像分类。 name x#填写你的姓名 sid B02014152#填写你的学号print(姓名:%s, 学号:%s%(name, sid))姓名:x, 学号:B02014152import torch import torch.nn as nn im…

完全背包问题(超级详细地讲解优化过程)

完全背包问题一、问题描述二、思路分析1、状态转移方程2、循环设计三、代码模板1、朴素版2、优化版(1)时间优化(2)空间优化一、问题描述 二、思路分析 完全背包和01背包的区别就在于01背包中,每个物品只能选择一次&am…

Java架构师大厂面试致命十连问,你接得住吗?

1.什么是缓存雪崩?怎么解决? ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 通常,我们会使用缓存用于缓冲对 DB 的冲击,如果缓存宕机,所有请求将直接打在 DB,造…

故事分享|27岁的Leader:要成为别人的灯塔,自己得先会“发光”

学习编程的年龄跨度很大,有还在读小学的10后小朋友,也有子孙满堂的八十岁老太太,但主力军,当属90后。 很多年前,90后还是许多人口中“垮掉的一代”。 许多年过去了,当90后逐渐摘掉不成熟的标签&#xff0…

ssh前置代理

ssh前置代理ssh前置代理Linux和mac配置ssh前置proxyUbuntu和mac的ncCentos的ncWindows的ssh前置proxyssh前置代理 适用于服务器无法直接连接过去,需要用proxy才可以连接的场景. Linux和mac配置ssh前置proxy nc属命令属于nmap-ncat包 Centos的nmap-ncat版本太低了,需要到https:…

学习笔记 - MapStruct 映射工具

学习笔记 - MapStruct 映射工具简介Maven 依赖实体类 Entity数据传输对象 DTO映射接口测试类IDEA 插件与 Lombok 一起使用参考资料简介 MapStruct是一个代码生成器,它基于约定优于配置的方法,极大地简化了Java bean类型之间映射的实现。 生成的映射代码使…

第8章 关系数据库设计

第8章 关系数据库设计 考试范围: 8.1-8.5,8.8,8.9 考试题型: 模式分解 考试内容: INF概念 非规范化设计的问题:数据冗余,插入/删除/更新异常 函数依赖的概念 平凡函数依赖 函数依赖集 最小(正则)覆…