Golang的嵌入和继承

    golang不支持继承,只支持嵌入和聚合(匿名字段称为嵌入,具名字段称为聚合)。golang经过嵌入,能够到达相似继承的效果,并且更为简洁。golang

    一个例子ide

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)
}

运行结果spa

wKioL1YfYSPA0NQ7AABd4hLIuMk657.jpg

自定义类型中嵌入一个类型后,嵌入类型中的任何方法均可以看成该自定义结构体自身的方法被调用。例如在Derive中嵌入Base,则Base的任何数据成员和方法均可以被看成Derive自身的数据成员和方法调用。从实际做用上看,golang中的嵌入相似与C++中的继承。blog

相关文章
相关标签/搜索