当前位置: 首页 > news >正文

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

继承

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

代码

import "fmt"type Person struct {Name stringAge  int
}func (p Person) Introduce() {fmt.Printf("大家好,我叫%s,我今年%d岁了。\n", p.Name, p.Age)
}type Student struct {PersonSchool string
}func (s Student) GoToTheClass() {fmt.Println("去上课...")
}func main() {student := Student{}student.Name = "小明"student.Age = 18student.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.lryc.cn/news/238293.html

相关文章:

  • chatGPT快捷键(最新版本)
  • 77基于matlab的蚁群优化路径算法,二维路径和三维路径优化
  • PyTorch中并行训练的几种方式
  • 基于非链式(数组)结点结构的二叉树的层序输入创建以及遍历
  • 云计算:开辟数字时代的无限可能
  • Django+Vue项目创建 跑通
  • 2023年中职“网络安全“—Linux系统渗透提权②
  • 多模态大模型训练数据集汇总介绍
  • IDEA中更换java项目JDK
  • C++函数
  • 设计模式-命令模式-笔记
  • 酒店品牌纷纷冲击中高端,东呈集团能否“快人一步”?
  • [hive] posexplode函数
  • C#具名参数(Named Parameters)
  • Vue3的组件如何通讯
  • MySQL SUBSTRING_INDEX 函数用法
  • 腾讯微服务平台TSF学习笔记(一)--如何使用TSF的Sidecar过滤器实现mesh应用的故障注入
  • day30_servlet
  • 计算机毕业设计 基于SpringBoot的社区物资交易互助平台/系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • go 判断两棵树内容是否一致
  • 从Hugging Face上手动下载并加载预训练模型
  • Vue 前置 后置 路由守卫 独享 路由权限控制 自定义属性
  • upload-labs关卡11(双写后缀名绕过)通关思路
  • go语言学习之旅之Go语言基础语法二
  • 七天.NET 8操作SQLite入门到实战 - SQLite 简介
  • 问题 R: 胜利大逃亡(HUST)
  • 项目讲解:让你在IT行业面试中以开发、实施、产品更近一步
  • Windows 安装 Docker
  • AI绘画使用Stable Diffusion(SDXL)绘制三星堆风格的图片
  • Window下如何对Redis进行开启与关闭