知识卡片
嵌入类型方法的提升与覆盖
内容
一个结构体嵌入另一个类型(作为匿名字段)后,被嵌入类型的方法会自动”提升”成外层结构体自己的方法——调用outer.Method()时,如果outer自己没有定义Method,Go会自动往下找嵌入字段有没有这个方法,找到就调用它,并把接收者设为那个嵌入字段的值,而不是整个外层结发散:这是没有继承机制的Go实现类似”方法重写”效果的方式——效果上像面向对象里子类覆盖父类方法,但机制。
参考来源
- 位置:《Go语言程序设计》第6章《面向对象编程》(源文件:_epub-src/OEBPS/text00040.html)
- 结论依据:原文在该章节围绕“一个结构体嵌入另一个类型(作为匿名字段)后,被嵌入类型的方法会自动"提升"成外层结构体自己的方法——调用`ou…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。
- 原始内容:值的地址的能力实现,前提是该值是可寻址的(即它是一个变量、一个解引用指针、一个数组或切片项,或者结构体中的一个可寻址字段)。因此,假设我们这样调用 value.Method() ,其中 Method() 需要一个指针接收者,而 value 是一个可寻址的值,Go语言会把这个调用等同于 (&value).Mehtod() 。 *Count …