您现在的位置是:群英 > 开发技术 > 编程语言
golang有继承吗,如何实现的
Admin发表于 2022-06-16 17:06:07859 次浏览
这篇文章主要给大家介绍“golang有继承吗,如何实现的”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“golang有继承吗,如何实现的”文章能对大家有所帮助。

golang实现继承的方法:Go采用组合的方式表达继承的语义,代码为【type Cat struct {p *Pet}func (c *Cat) Catch(){fmt.Println("*****")}】。

golang实现继承的方法:

用封装的话题上来,转换成编程语言就是A把猫封装成宠物了,B把狗封装成宠物了,而 C需要宠物时,猫和狗都是宠物,最终结果要么是程序依旧正常运行,要么是程序意外挂掉了,因为很可能某一种宠物可能并不符合特定需求.

这种重复定义问题归咎于封装的标准不同,猫和狗两者的封装过程是独立进行的,并没有在一起商量着看看能不能继续抽象出通用模型,混乱的封装导致了猫是宠物,狗也是宠物.

这种多种相关概念的封装很容易出现此类问题,所以适当进行统一分析继续抽象出更高层次的封装概念尤为重要,基于此,原来的封装就能从这种通用概念中解放出来,仅仅保留自己的特色就好,大大简化了模型的语义.

普通封装的概念和更高层次的抽象封装概念的关系就是面向对象中的继承,即猫继承于宠物,表示猫不但拥有宠物的特点还有猫自己的亮点.

对于狗也是一样,狗是宠物,狗也是狗自己本身,体现了自己的特点.

Go语言和其他主流的面向对象语言有所不同,Go 并不支持继承特性,因而也没有单继承,多继承,重写方法等复杂概念.

那Go是如何描述这种普通封装和抽象封装之间的关系呢?

肯定不是把猫定义成宠物,狗也定义成宠物那种方式!

Go 实现继承的语义不是通过 extends 关键字而是通过结构体组合的方式,请看相关代码.

宠物就应该能文能武,这里不关心结构体的字段,因而并没有定义相关字段.

type Pet struct {
}
func (p *Pet) Skill() {
    fmt.Println("能文能武的宠物")
}

猫是能够抓老鼠的宠物,Go采用组合的方式表达继承的语义.

type Cat struct {
    p *Pet
}
func (c *Cat) Catch() {
    fmt.Println("老鼠天敌喵喵喵")
}

狗是自带导航功能的宠物,看我导盲犬的超能力!

type Dog struct {
    p *Pet
}
func (d *Dog) Navigate() {
    fmt.Println("自带导航汪汪汪")
}

接下来,C开始检验猫和狗作为宠物是否具备能文能武的基本要求,与此同时有没有自身的特色?

func TestExtendInstance(t *testing.T) {
    p := new(Pet)
    d := new(Dog)
    d.p = p
    // 自带导航汪汪汪
    d.Navigate()
    // 能文能武的宠物
    d.p.Skill()
    fmt.Println()
    c := new(Cat)
    c.p = p
    // 老鼠天敌喵喵喵
    c.Catch()
    // 能文能武的宠物
    c.p.Skill()
}

上述结果证明,Go 语言虽然不支持 extends 关键字表达的继承特性,但是采用组合的方式也是可以实现继承语义的


通过以上内容的阐述,相信大家对“golang有继承吗,如何实现的”已经有了进一步的了解,更多相关的问题,欢迎关注群英网络或到群英官网咨询客服。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: Golang
相关信息推荐
2022-06-16 17:02:00 
摘要:golang删除文件的方法:首先打开终端;然后输入代码【import "os" func main () {err := os.Remove(logFile) if err != nil {// 删除失败}else {// 删除成功}】。
2022-05-19 17:39:52 
摘要:开发go语言的编译器有:Gogland、Eclipse with goclipse、LiteIDE、KomodoIDE、Atom、Brackets、Visual Studio Code、Cloud9、CodeEnv、Wide等。
2022-10-17 18:41:12 
摘要:方法:1、定义数组时给所有元素赋初值,例“int a[5]={1,2,3,4,5}”;2、给一部分元素赋值,例“int a[5]={1,2}”;3、定义时不指定数组长度,直接给所有元素赋初值,例“int a[]={1,2,3,4,5}”。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部