go的继承是使用匿名字段来实现的
package util //----------------Person---------------- type Person struct { Name string Age int Sex string } //-------------------------------- //----------------Boy---------------- type Boy struct { Person X string } //-------------------------------- //----------------Girl---------------- type Girl struct { Person Y string } //--------------------------------
//匿名字段可以实现类似继承的效果
// boy := util.Boy{util.Person{"Eric", 19, "boy"}, "1"}
// girl := util.Girl{util.Person{"Jessica", 19, "girl"}, "2"}
// fmt.Println(boy)
// fmt.Println(girl)
方法的重写override通过在子类中重新定义同名函数来实现,reciever接收的是子类的实例
package util //----------------Person---------------- type Person struct { Name string Age int Sex string } func (self *Person) Speak() string { return "I am a person" } //-------------------------------- //----------------Boy---------------- type Boy struct { Person X string } func (self *Boy) Speak() string { return "I am a Boy" } //-------------------------------- //----------------Girl---------------- type Girl struct { Person Y string } func (self *Girl) Speak() string { return "I am a Girl" } //--------------------------------
// 方法重写的实现override
// boy := util.Boy{util.Person{"Eric", 19, "boy"}, "1"}
// fmt.Println(boy.Speak())
// girl := util.Girl{util.Person{"Jessica", 19, "girl"}, "2"}
// fmt.Println(girl.Speak())