为了账号安全,请及时绑定邮箱和手机立即绑定

Go 支持继承吗?

Go 支持继承吗?

Go
不负相思意 2021-06-18 18:01:48
我听到很多人谈论 Go,以及它如何不支持继承。在真正使用语言之前,我只是随波逐流,听着听着说。在稍微弄乱语言之后,开始掌握基础知识。我遇到了这个场景:    package maintype Thing struct {    Name string    Age  int}type UglyPerson struct {    Person    WonkyTeeth bool}type Person struct {    Thing}type Cat struct {    Thing}func (this *Cat) SetAge(age int){    this.Thing.SetAge(age)}func (this *Cat GetAge(){     return this.Thing.GetAge() * 7}func (this *UglyPerson) GetWonkyTeeth() bool {    return this.WonkyTeeth}func (this *UglyPerson) SetWonkyTeeth(wonkyTeeth bool) {    this.WonkyTeeth = wonkyTeeth}func (this *Thing) GetAge() int {    return this.Age}func (this *Thing) GetName() string {    return this.Name}func (this *Thing) SetAge(age int) {    this.Age = age}func (this *Thing) SetName(name string) {    this.Name = name}现在,它的作用是从事物结构组成 Person 和 Cat 结构。通过这样做,不仅 Person 和 Cat 结构与 Thing Struct 共享相同的字段,而且通过组合,Thing 的方法也被共享。这不是继承吗?也通过实现这样的接口:type thing interface {    GetName() string    SetName(name string)    SetAge(age int)}所有三个结构现在都已加入,或者我应该说,可以以同构的方式使用,例如“事物”数组。所以,我交给你了,这不是传承吗?编辑添加了一个名为“丑陋的人”的新派生结构,并覆盖了 Cat 的 SetAge 方法。
查看完整描述

3 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

这叫做组合。Person 或 Cat 的方法无法直接访问 Thing 的字段。此外,如果例如 Cat 实现了自己的 SetAge() 并且您想调用 Thing 之一,则必须调用 myCat.Thing.SetAge(42) 而不是 myCat.SetAge(42)。


查看完整回答
反对 回复 2021-06-21
  • 3 回答
  • 0 关注
  • 270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信