记录下golang struct的继承关系
package main
import ("fmt"
)func main() {testDerive()
}type A struct {aa intBB string
}type B struct {Aaa intCC string
}func (a *A) aFunc() {fmt.Println("A.aFunc")
}func (a *A) BFunc() {fmt.Println("A.BFunc")
}func (b *B) aFunc() {fmt.Println("B.aFunc")
}func (b *B) CFunc() {fmt.Println("B.CFunc")
}func testDerive() {var tb B//变量测试fmt.Println(tb.aa)fmt.Println(tb.A.aa)fmt.Println(tb.BB)fmt.Println(tb.A.BB)fmt.Println(tb.CC)tb.aa = 9tb.A.aa = 8tb.BB = "A.BB"tb.CC = "B.CC"fmt.Println(tb.aa)fmt.Println(tb.A.aa)fmt.Println(tb.BB)fmt.Println(tb.A.BB)fmt.Println(tb.CC)//函数测试tb.aFunc()tb.A.aFunc()tb.BFunc()tb.A.BFunc()tb.CFunc()
}
输出:
0
09
8
A.BB
A.BB
B.CC
B.aFunc
A.aFunc
A.BFunc
A.BFunc
B.CFunc
1.golang的继承是继承父结构体的所有属性和方法,包括大小写开头的变量和函数。
2.如果子结构体和父结构体有同名的变量或者函数,并不会产生覆盖,可以通过“父结构名字.变量或函数名”的方式调用父结构体的同名变量或函数