我听到很多人谈论 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 方法。
慕森卡
相关分类