Golang的嵌入和繼承

    golang不支持繼承,只支持嵌入和聚合(匿名字段稱爲嵌入,具名字段稱爲聚合)。golang通過嵌入,可以到達類似繼承的效果,而且更爲簡潔。

    一個例子

type Base struct{
    b int
}
 
func (base *Base) setB(i int) {
    base.b = base.b + i
}
 
type Derive struct {
    Base    // embed
    d   int // aggregation
}
 
func (derive *Derive) setD(i int) {
    derive.d = derive.d + i
}
 
func main() {
    var d Derive
    fmt.Println(d.b, d.d)
    d.setB(5)
    d.setD(10)
    fmt.Println(d.b, d.d)
}

運行結果

wKioL1YfYSPA0NQ7AABd4hLIuMk657.jpg

自定義類型中嵌入一個類型後,嵌入類型中的任何方法都可以當作該自定義結構體自身的方法被調用。例如在Derive中嵌入Base,則Base的任何數據成員和方法都可以被當作Derive自身的數據成員和方法調用。從實際作用上看,golang中的嵌入類似與C++中的繼承。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章