首先,我对 Go 很陌生,所以请原谅术语中的任何失误或错误。我怀疑我缺乏对术语的掌握也部分归咎于经过数小时的查找后没有找到以下问题的答案。
简而言之,我希望以下代码的输出为
I am the Adult
I am the Child
相反,输出在哪里
I am the Adult
I am the Adult
代码:
package main
import "fmt"
type Human struct {
age uint
name string
}
func (h Human) sayName() error {
fmt.Println("I am the Adult")
return nil
}
func (h Human) Introduce() error {
h.sayName()
return nil
}
type Child struct {
Human
}
func (c Child) sayName() error {
fmt.Println("I am the Child")
return nil
}
func main() {
h := Human{}
h.Introduce()
c := Child{Human{}}
c.Introduce()
}
所以本质上,虽然 Introduce() 只在嵌入类型 Human 中实现,但它调用了 sayName(),它在嵌入类型和嵌入类型中都实现了。
我知道当前的输出是这样的,因为嵌入的 Human 结构不“知道”它是嵌入的,因此永远不能调用 Child.sayName 并且只会调用它自己的 sayName() 函数。
有没有办法实例化一个 Human 结构(或一个嵌入结构),您可以在其中用另一个 sayName() 函数“替换” Human.sayName()?
呼如林
慕的地10843
料青山看我应如是
相关分类