golang struct継承テスト
1091 ワード
golang structの継承関係を記録する
出力:
以上のテストから、次のことがわかります.
1.golangの継承は、大文字と小文字の先頭にある変数と関数を含む親構造体のすべての属性とメソッドを継承します.
2.子構造体と親構造体に同じ名前の変数または関数があり、上書きが発生しない場合は、「親構造名.変数または関数名」で親構造体の同じ名前の変数または関数を呼び出すことができます.
package main
import (
"fmt"
)
func main() {
testDerive()
}
type A struct {
aa int
BB string
}
type B struct {
A
aa int
CC 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 = 9
tb.A.aa = 8
tb.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
0
9
8
A.BB
A.BB
B.CC
B.aFunc
A.aFunc
A.BFunc
A.BFunc
B.CFunc
以上のテストから、次のことがわかります.
1.golangの継承は、大文字と小文字の先頭にある変数と関数を含む親構造体のすべての属性とメソッドを継承します.
2.子構造体と親構造体に同じ名前の変数または関数があり、上書きが発生しない場合は、「親構造名.変数または関数名」で親構造体の同じ名前の変数または関数を呼び出すことができます.