@ evanmcdonnalのポイントに追加すると、埋め込みは継承も多相もありません。継承はちょうどあなたが自由のためのインタフェースの実装を得るかもしれないような利便性であるが、その明示的なGoで起こる。 @evanmcdonnalが指摘したように、埋め込みは継承のように見えるかもしれませんが、そうではありません。
代わりに、多相性の概念を継承と埋め込みと継承から分離する必要があります。この比較は、ほとんどのオブジェクト指向言語から継承されません。一例として、以下は多型の実装である。 Discover
がインターフェイスをとり、A
とB
がインターフェイスを実装していることに注目してください。
package main
import "fmt"
type A struct{}
type B struct{}
type Test interface{
GetTest() string
}
func (a *A) GetTest() string {
return "i am in A"
}
func (b *B) GetTest() string {
return "i am in B"
}
func Discover(t Test) string {
return t.GetTest()
}
func main() {
a := &A{}
b := &B{}
fmt.Println(Discover(a))
fmt.Println(Discover(b))
}
Goには継承はなく(ポリモーフィズムもありません)、いくつかの関連する/可能な重複:[1](http:// stackoverflow。(2)(http://stackoverflow.com/questions/30622605/can-embedded)を参照してください。[2](http://stackoverflow.com/questions/30622605/can-embedded親子関係の知識を持つ)、[3](http://stackoverflow.com/questions/29390736/go-embedded-struct-call-child-method-instead-parent-method) 、[4](http://stackoverflow.com/questions/29144622/what-is-the-idiomatic-way-in-go-to-create-a-complex-hierarchy-of-structs)を参照してください。 – icza