Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance 从继承的结构执行实际对象方法,而不将类型转换为继承的类型_Inheritance_Go - Fatal编程技术网

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
}