golang 实现继承方式

经常使用java或c++同学应该比较了解纯面向对象,继承、接口、封装等特性,在go中并没有特别显示的表达出来,但是go隐含是支持的,只是支持的方式不一致,可以说go的方式更加灵活,go语言精髓是组合机制,接口也是一个方法类型,相互组合就会出现很多种,没有java那种强制绑定的机制,这种挺好的,作为java开发者,接触go,确实给我耳目一新,给大大赞,我这边我自己的理解通过go实现java中的继承,来看看效果。

// 定义动物接口方法,描述动物行为,这个接口可以先不管它,我用来测接口定义行为的
type Animaler interface {//吃饭Eat(string)
}// 定义动物父级结构体,主要描述动物相关属性
type AnimalParent struct {Name stringAge  int
}// 默认动物都会跑,这个方法类似默认方法,可以不覆盖
func (a AnimalParent) run() {fmt.Println("这是父级动物级别,animal=", a.Name)
}type AbstractAnimal struct {//颜色Color string//足Foot int//父类AnimalParent
}func (a AbstractAnimal) Action(animaler Animaler) {animaler.Eat(a.Name + "在吃饭")}/*func (a AbstractAnimal) run() {fmt.Println("这是抽象类动物级别,animal=", a.Name)
}*//*
*定义猫
*/
type Cat struct {AbstractAnimalFood string
}func (c Cat) Eat(str string) {fmt.Println(c.Name, "吃的", c.Food, str)
}/*
func (c Cat) run() {fmt.Println("这是猫级别,name=", c.Name)}*/func main() {cat := Cat{AbstractAnimal: AbstractAnimal{Color: "黄色",Foot:  4,AnimalParent: AnimalParent{Name: "猫",},},Food: "鱼,老鼠",}cat.run()cat.Action(cat)}

把抽象类方法去掉,看效果:

打印的是父级的run

抽象类run打开:

这是抽象类的run方法

用cat 重写run方法

看看效果是cat级别的run方法,完全是可以实现java的多态情况,不过比java更加灵活,强大;还有就是go的接口,是一个类型,只有方法,可以和结构体进行灵活组合,达到牛逼的扩展性,比较java强,还有空接口概念,可以理解为java的object类,任何类型都实现了空接口,go值得学习

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware 最新的安全漏洞公告VMSA-2024-0013

#深度好文计划# 一、摘要 2024年6月26日,VMware 发布了最新的安全漏洞公告 VMSA-2024-0013,修复了 VMware ESXi 和 VMware vCenter 中的多个安全漏洞。 VMSA-2024-0013:VMware ESXi 和 vCenter Server 更新修正了多个安全性漏洞 &#xff…

2024/5/9【贪心5/5】--代码随想录算法训练营day36|56. 合并区间、738.单调递增的数字、968.监控二叉树 (可跳过)

56. 合并区间 力扣链接 class Solution:def merge(self, intervals):result []if len(intervals) 0:return result # 区间集合为空直接返回intervals.sort(keylambda x: x[0]) # 按照区间的左边界进行排序result.append(intervals[0]) # 第一个区间可以直接放入结果集中…

JavaSE 利用正则表达式进行本地和网络爬取数据(爬虫)

爬虫 正则表达式的作用 作用1:校验字符串是满足规则 作用2:在一段文本中查找满足需要的内容 本地爬虫和网络爬虫 Pattern类 表示正则表达式 Matter类 文本编译器,作用按照正则表达式的规则去读取字符串,从头开始读取&#xf…

C++ 入门

前言 c的发展史: C的起源可以追溯到1979年,当时Bjarne Stroustrup在贝尔实验室开始开发一种名为“C with Classes”的语言。以下是C发展的几个关键阶段: 1979年:Bjarne Stroustrup在贝尔实验室开始开发“C with Classes”。1983…

ONLYOFFICE 桌面编辑器 8.1华丽登场

简介:全新ONLYOFFICE 桌面编辑器 8.1解锁全新PDF编辑、幻灯片优化与本地化体验,立即下载! 前言:在数字化时代,高效的办公协作工具是企业和个人不可或缺的利器。ONLYOFFICE,作为一款功能强大的云端和桌面办公…

CSS的媒体查询:响应式布局的利器

关于CSS的媒体查询 CSS媒体查询是CSS层叠样式表(Cascading Style Sheets)中的一个核心功能,它使得开发者能够根据不同的设备特性和环境条件来应用不同的样式规则。这是实现响应式网页设计的关键技术,确保网站或应用能够在多种设备上,包括桌面…

python FastAPI操作数据库实现注册登录

代码如下 from fastapi import FastAPI, APIRouter, HTTPException, status from pydantic import BaseModel from fastapi.responses import JSONResponse from typing import Optional from fastapi.middleware.cors import CORSMiddleware from utils.time import DateTime…

React的Props、生命周期

Props 的只读性 “Props” 是 React 中用于传递数据给组件的一种机制,通常作为组件的参数进行传递。在 React 中,props 是只读的,意味着一旦将数据传递给组件的 props,组件就不能直接修改这些 props 的值。所以组件无论是使用函数…

【案例分析:基于 Python 的几种神经网络构建 一维的和二维的全介质和金属SPR 材料的光谱预测与逆向设计】

案例分析:传播相位与几何相位超构单元仿真与器件库提取与二维超构透镜设计与传播光场仿真 案例分析: 片上的超构单元仿真与光学参数提取 案例分析:基于粒子群方法的耦合器设计 案例分析:基于 Python 的几种神经网络构建 一维的和二…

阿里云PAI主机网页访问测试

笔者使用的阿里云平台PAI主机(首次使用免费三个月额度),由于其默认不设置公网IP,所以在该主机上启动HTTP服务后无法访问测试。 这里使用ssh来作隧道穿透,首先需要配置ssh。 云主机配置ssh 1. 修改root账号密码 在云主机上执行 passwd ro…

示例:WPF中推荐一个支持折叠展开的GridSpliter自定义控件GridSplitterBox

一、目的:推荐一个支持折叠展开的GridSpliter自定义控件GridSplitterBox 二、效果 实现功能:设置菜单显示位置,最小宽度,最大宽度,位置持久化保存 三、环境 VS2022 Net7 四、使用方式 1、安装nuget包:H…

【前端】HTML5基础

目录 0 参考1 网页1.1 什么是网页1.2 什么是HTML1.3 网页的形成 2 浏览器2.1 常用的浏览器2.2 浏览器内核 3 Web标准3.1 为什么需要Web标准3.2 Web标准的构成 4 HTML 标签4.1 HTML语法规范4.1.1 基本语法概述4.1.2 标签关系4.1.2.1 包含关系4.1.2.2 并列关系 4.2 HTML基本结构标…

STL中的迭代器模式:将算法与数据结构分离

目录 1.概述 2.容器类 2.1.序列容器 2.2.关联容器 2.3.容器适配器 2.4.数组 3.迭代器 4.重用标准迭代器 5.总结 1.概述 在之前,我们讲了迭代器设计模式,分析了它的结构、角色以及优缺点: 设计模式之迭代器模式-CSDN博客 在 STL 中&a…

从源码到上线:直播带货系统与短视频商城APP开发全流程

很多人问小编,一个完整的直播带货系统和短视频商城APP是如何从源码开发到最终上线的呢?今天,笔者将详细介绍这一全过程。 一、需求分析与规划 1.市场调研与需求分析:首先需要进行市场调研,了解当前市场的需求和竞争情…

PyCharm2024 for mac Python编辑开发

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…

基于Java的汽车租赁系统【附源码】

论文题目 设计(论文)综述(1000字) 当今社会,汽车租赁已成为一种受欢迎的出行方式。本文旨在探讨汽车租赁行业的发展趋势、市场规模及其对环境的影响。目前,汽车租赁行业正在经历着快速的发展。随着经济的发…

麒麟系统安装Redis

一、背景 如前文(《麒麟系统安装MySQL》)所述。 二、下载Redis源码 官方未提供麒麟系统的Redis软件,须下载源码编译。 下载地址:https://redis.io/downloads 6.2.14版本源码下载地址:https://download.redis.io/re…

【实战教程】如何使用JMeter来轻松测试WebSocket接口?

1、websocket接口原理 打开网页:从http协议,升级到websocket协议,请求建立websocket连接服务器返回建立成功成功客户端向服务端发送匹配请求服务端选择一个客服上线服务器返回客服id客户端向服务器发送消息服务器推送消息给指定的客服服务器…

【深度学习】python之人工智能应用篇--跨模态生成技术

跨模态生成技术概述 跨模态生成技术是一种将不同模态的数据(如文本、图像、音频、视频等)进行融合和转换的技术。其目标是通过将一个模态的数据作为输入,生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性,提高…

qt 5.6 qmake手册

qt 5.6 qmake手册 (笔者翻译的qmake手册,多数是机翻,欢迎评论区纠错修正) Qmake工具有助于简化跨不同平台开发项目的构建过程。它自动生成Makefile,因此创建每个Makefile只需要几行信息。您可以将qmake用于任何软件项目…