Golang中的"继承"

【Golang中的"继承"】go语言是没有继承的,但结构体支持匿名字段,可以利用这个来实现“继承”。
Human。有2个字段:name,sex。有2个方法:walkeat
SuperMan。有3个字段:Humannamelevel。有2个方法:eatfly
这是标准说法,但你可以这么理解:SuperMan继承了Human,当然同样继承了所有字段和所有方法。同时又加入了自己的两个字段,其中有一个字段和父类是同名的,另外重写了父类中的一个方法,也添加了自己的一个方法。
代码如下:

package main import( "fmt" )type Human struct{ name string sex string }func (h Human) Eat(){ fmt.Println("Human.Eat:",h) }func (h Human) Walk(){ fmt.Println("Human.Walk:",h) }type SuperMan struct{ Human name string level int }func (s SuperMan) Eat(){ fmt.Println("SuperMan.Eat:",s) }func (s SuperMan) Fly(){ fmt.Println("I believe I can fly!",s) }func test(h Human){ fmt.Println("test pass!") }func main() { h:=Human{"zzp","man"} h.Eat()//调用自己的方法 h.Walk()//调用自己的方法s:=SuperMan{Human{"sm","no"},"myname",99}fmt.Println(s.name)//myname fmt.Println(s.Human.name)//sm fmt.Println(s.sex)//no fmt.Println(s.Human.sex)//nos.Walk()//调用父类中的方法 s.Eat()//调用自己重写的父类的方法 s.Human.Eat()//调用父类中被自己重写的方法,这点比java高级 s.Fly()//调用自己的方法test(h) //test(s)//导致错误,方法需要Human类型,但传的是SuperMan类型 test(s.Human)//正确 }

参考链接:https://blog.csdn.net/qq_26847293/article/details/51085327

    推荐阅读