Go語言基礎:深入理解 struct 內嵌 inteface
阿新 • • 發佈:2019-01-29
1. 如何更好的理解匿名介面
// 匿名介面可以被用作變數或者結構屬性型別
type Man struct {
gender interface {
GetGender() string
}
}
上面Man類可以擴充套件成
type gender interface {
GetGender() string
}
type Man struct {
gender//
}
程式碼這樣寫是不是好懂多了。
2. 匿名介面物件使用,為什麼要採用引用的方式?
// 匿名介面物件的使用
varMan := Man{&Employee{
name: "Nobody" ,
age: 20,
salary: 10000,
gender: "Unknown",
}}
原因是匿名介面gender的實現的接收者是一個指標,因此這裡要採用引用的方式賦值。
3. 為什麼Man類的初始化化可以用Employee來初始化?
我們知道Go裡面規定如果我們定義了一個 interface 的變數,那麼這個變數裡面可以存實現這個 interface 的任意型別的對像。而 Employee 類實現了 gender 介面,而 Man 中成員有一個 gender 介面,因此 Man 可以用 Employee 來初始化。
4. 再補一個特性
內嵌介面的struct同樣滿足Go語言基礎:method 中提到的繼承和重寫的特性
method繼承和重寫
繼承:如果 struct 中的一個匿名段實現了一個 method,那麼包含這個匿名段的 struct 也能呼叫該 method。
重寫:如果 struct 中的一個匿名段實現了一個 method,包含這個匿名段的 struct 是可以重寫匿名欄位的方法的。