概念简介
go语言本身没有c++的继承和覆盖的概念,但是通过结构体匿名字段可以实现从别的结构体里继承方法以及覆盖
代码实现
type basicInfo struct {
name string
age int32
}
func (b basicInfo) printinfo() {
fmt.Printf("name:%s, age:%d\n", b.name, b.age);
}
type student struct {
basicInfo
height int32
}
func TestInherit (t *testing.T) {
s := student{basicInfo{name: "ysw", age: 29}, 168}
//s.info.printinfo()
s.printinfo()
}
执行结果
覆盖
type basicInfo struct {
name string
age int32
}
func (b basicInfo) printinfo() {
fmt.Printf("name:%s, age:%d\n", b.name, b.age);
}
func (s student) printinfo() {
fmt.Printf("name:%s, age:%d, height:%d\n", s.name, s.age, s.height);
}
type student struct {
basicInfo
height int32
}
func TestInherit (t *testing.T) {
s := student{basicInfo{name: "ysw", age: 29}, 168}
//s.info.printinfo()
s.printinfo()
}
执行结果,可见继承过来的方法可以被当前结构体的方法给覆盖。