golang struct继承测试

来源:互联网 发布:淘宝卖的小样是真的吗 编辑:程序博客网 时间:2024/05/23 05:07

记录下golang struct的继承关系


package mainimport ("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()}

输出:

0098A.BBA.BBB.CCB.aFuncA.aFuncA.BFuncA.BFuncB.CFunc


由以上测试可以看出来:

1.golang的继承是继承父结构体的所有属性和方法,包括大小写开头的变量和函数。

2.如果子结构体和父结构体有同名的变量或者函数,并不会产生覆盖,可以通过“父结构名字.变量或函数名”的方式调用父结构体的同名变量或函数