计算机编程语言,尤其是面向对象的编程语言,虽然语法不同,但其原理大都是相通的!那么go语言的method方法的继承是否也有像python一样的顺序继承的机制呢?我们来用一个简单的实例探讨一下。
go语言method有没有继承顺序实例
package main
import "fmt"
type Flower struct{}
type Herbaceous struct{}
func (f Flower) flower_language() {
fmt.Println("这是花种类!")
}
func (h Herbaceous) flower_language() {
fmt.Println("这是草本植物!")
}
type Rose struct {
Lan string
Flower //匿名字段,Rose继承了Flower的字段和方法
Herbaceous
}
func main() {
var r Rose
r.flower_language()
//r.Flower.flower_language()
//r.Herbaceous.flower_language()
}
代码输出:
ambiguous selector r.flower_language
代码解析:
如上代码,我们在Rose结构体当中用了Flower匿名字段和Herbaceous匿名字段,以继承这两个结构体,然后尝试通过r.flower_language()来调用继承来的方法,发现发生ambiguous selector r.flower_language的错误,意思就是调用的方法模糊不清,因为Flower结构体和Herbaceous结构体都声明了这中method方法。如果使用r.Flower.flower_language()或
r.Herbaceous.flower_language(),便可正常调用。
结论:
因此,结论是go语言结构体(类)的继承并没有像python那样的顺序机制。
网友评论