Inheritance 从继承的结构执行实际对象方法,而不将类型转换为继承的类型
Inheritance 从继承的结构执行实际对象方法,而不将类型转换为继承的类型,inheritance,go,Inheritance,Go,当我从继承的结构中执行方法,并在其中执行另一个结构方法时,它是从继承的结构中执行的方法,而不是实际的对象类型。正如JimB所说,Go中没有像其他语言中那样的正确继承。为了帮助可视化,让我们将代码放入main(): 调用a.Parse()时,Go编译器会检查a是否有方法Parse(),它确实有。因此它调用方法a.Parse 调用b.Parse()时,Go编译器检查b是否有方法Parse(),但它没有,但结构中的嵌入字段有!因此它只使用该字段中的方法,因此调用b.A.Parse()。事实上,您可以将
当我从继承的结构中执行方法,并在其中执行另一个结构方法时,它是从继承的结构中执行的方法,而不是实际的对象类型。正如JimB所说,Go中没有像其他语言中那样的正确继承。为了帮助可视化,让我们将代码放入
main()
:
调用a.Parse()
时,Go编译器会检查a
是否有方法Parse()
,它确实有。因此它调用方法a.Parse
调用b.Parse()
时,Go编译器检查b
是否有方法Parse()
,但它没有,但结构中的嵌入字段有!因此它只使用该字段中的方法,因此调用b.A.Parse()
。事实上,您可以将B更改为:
a := &A{}
b := &B{}
a.Parse()
b.Parse()
唯一的区别是b.Parse()
不起作用,您必须手动指定.A
(因此b.A.Parse()
),但它在功能上保持不变
进一步阅读:
a := &A{}
b := &B{}
a.Parse()
b.Parse()
type B struct {
A A
}