我听到很多人谈论 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)。
- 3 回答
- 0 关注
- 270 浏览
添加回答
举报
0/150
提交
取消