Go 支持继承吗?

我听到很多人谈论 Go,以及它如何不支持继承。在真正使用语言之前,我只是随波逐流,听着听着说。在稍微弄乱语言之后,开始掌握基础知识。我遇到了这个场景:


    package main


type 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 方法。


不负相思意
浏览 271回答 3
3回答

慕森卡

这叫做组合。Person 或 Cat 的方法无法直接访问 Thing 的字段。此外,如果例如 Cat 实现了自己的 SetAge() 并且您想调用 Thing 之一,则必须调用 myCat.Thing.SetAge(42) 而不是 myCat.SetAge(42)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go