HumannamesexwalkeatSuperManHumannameleveleatflySuperManHuman
代码如下:
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)//no
s.Walk()//调用父类中的方法
s.Eat()//调用自己重写的父类的方法
s.Human.Eat()//调用父类中被自己重写的方法,这点比java高级
s.Fly()//调用自己的方法
test(h)
//test(s)//导致错误,方法需要Human类型,但传的是SuperMan类型
test(s.Human)//正确
}