我听过很多人谈论 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
}
现在,它是做什么的,它由 Thing 结构组成了 Person 和 Cat 结构。这样,不仅 Person 和 Cat 结构体与 Thing 结构体共享相同的 Fields,而且通过组合,Thing 的方法也被共享。这不是继承吗?同样通过实现这样的接口:
type thing interface {
GetName() string
SetName(name string)
SetAge(age int)
}
所有三个结构现在都连接了,或者我应该说,可以以同质的方式使用,例如“事物”的数组。
所以,我推给你,这不是继承吗?
编辑
添加了一个新的派生结构,称为“丑陋的人”,并为 Cat 覆盖了 SetAge 方法。