Go 结构体嵌入模拟继承时,接收者方法如何访问派生结构体属性?

go 结构体嵌入模拟继承时,接收者方法如何访问派生结构体属性?

go方法与接收者中的继承问题

当使用结构体嵌入模拟继承时,接收者方法中无法获取派生结构体对象的属性。

考虑以下代码:

type person struct {
    name string
}

type student struct {
    person
    name string
}

func (p person) name() {
    fmt.println(p.name)
}

func main() {
    student := student{person{"human"}, "aaron"}
    student.name()
}

输出 "human",而不是 "aaron"。原因在于接收者 person 传递给 name() 方法,因此 name() 方法只能访问 person 的属性。

解决方法是重写 name() 方法:

func (s Student) Name() {
    fmt.Println(s.name)
}

这将使用 student 接收者调用 name() 方法,允许访问 student 的属性。

需要注意的是,go 并未采用传统的继承概念,而是通过组合来模拟继承。因此,go 中没有构造函数或继承关键字,而是使用了嵌入和方法重写。

以上就是Go 结构体嵌入模拟继承时,接收者方法如何访问派生结构体属性?的详细内容,更多请关注www.sxiaw.com其它相关文章!