聽 聽 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) }
运行结果
自定义类型中嵌入一个类型后,嵌入类型中的任何方法都可以当作该自定义结构体自身的方法被调用。例如在Derive中嵌入Base,则Base的任何数据成员和方法都可以被当作Derive自身的数据成员和方法调用。从实际作用上看,golang中的嵌入类似与C++中的继承。
本文出自 “说话的白菜” 博客,谢绝转载!
有疑问加站长微信联系(非本文作者)