go語言基礎 結構體巢狀
阿新 • • 發佈:2019-02-16
go語言當中的聚合和繼承都是模擬出來的,子類是可以使用父類裡的欄位或功能
結構體的巢狀
type A struct{ //父類name string
age int
}
type B struct{ //子類
a A // 模擬聚合關係
.....
}
type C struct{ //子類
A // 模擬繼承
}
b := B{}
b.a.name,
c := C{}
b.name,
package main import "fmt" type Person5 struct { name string age int } //在結構體中屬於匿名結構體的欄位稱為提升欄位 type Student struct { //name string//age int Person5 // 模擬繼承:結構體的巢狀 school string } func main() { /* 繼承:兩個類的繼承關係。子類可以使用父類的功能 對於go語言,沒有真正的繼承。靠結構體的巢狀模擬繼承功能的。 結構體的巢狀: 聚合關係:一個類作為另一個類的屬性。has - a type A struct{} type B struct{ a A } 繼承關係:一個子類繼承一個父類。is - a type C struct{}type D struct{ C } */ p1 := Person5{"王二狗",30} fmt.Println(p1.name,p1.age) s1 := Student{} s1.name ="李小花" // 提升欄位 s1.age=30 // 提升欄位 s1.school="清華小班" fmt.Println(s1.name,s1.age,s1.school) s2:=Student{Person5{"如夢",20},"清華大班"} fmt.Println(s2) s3:=Student{Person5:Person5{"如歌",23},school:"清華中班"} fmt.Println(s3) }