type Human struct{
name string
sex string}func(t *Human)Eat(){
fmt.Println("eating")}func(t *Human)Walk(){
fmt.Println("Walking")}type SuperMan struct{
Human //结构体首位代表继承
age int}// 重写父类方法func(s *SuperMan)Eat(){
fmt.Println("s->eating")}func(s *SuperMan)ShowAge(){
fmt.Println(s.age)}funcmain(){
h := Human{"zhang","female"}
h.Eat()
h.Walk()
s := SuperMan{Human{"kelke","man"},100}
s.Walk()
s.Eat()
s.ShowAge()}/*输出结果为
eating
Walking
Walking
s->eating
100
*/
多态
//定义接口,本质为指针type Human interface{Say()GetCountry()stringGetName()string}type Chinese struct{// Human
country string
name string}func(c *Chinese)Say(){
fmt.Println("你好")}func(c *Chinese)GetCountry()string{return c.country
}func(c *Chinese)GetName()string{return c.name
}type British struct{
country string
name string}func(c *British)Say(){
fmt.Println("hello")}func(c *British)GetCountry()string{return c.country
}func(c *British)GetName()string{return c.name
}funcSayHello(human Human){
human.Say()
fmt.Println(human.GetCountry())
fmt.Println(human.GetName())}funcmain(){var human Human
human =&Chinese{"China","丁"}
c := Chinese{"China","丁"}
human.Say()
fmt.Println(human.GetCountry())
fmt.Println(human.GetName())
fmt.Println("----------")
human =&British{"English","lola"}
e := British{"English","lola"}
human.Say()
fmt.Println(human.GetCountry())
fmt.Println(human.GetName())
fmt.Println("----------")// c.Say()// e.Say()SayHello(&c)
fmt.Println("----------")SayHello(&e)}/*输出结果
你好
China
丁
----------
hello
English
lola
----------
你好
China
丁
----------
hello
English
lola
*/