Go のポリモーフィズム
オブジェクト指向プログラミングでは、ポリモーフィズムにより、単一のインターフェイスで複数の型のオブジェクトを参照できます。 Go はこの概念を厳密に強制しませんが、同様の動作を実現するための代替方法を提供します。
次のコード スニペットを考えてみましょう。
type Foo struct { ... } type Bar struct { Foo ... } func getFoo() Foo { return Bar{...} }
お気づきのとおり、Go では、このコードはgetFoo() が Foo のインスタンスを返さなければならないことを示すエラー。ポリモーフィックな動作を実現するには、Go でインターフェイスと合成を利用できます。
package main import "fmt" type Foo interface { printFoo() } type FooImpl struct { } type Bar struct { FooImpl } type Bar2 struct { FooImpl } func (f FooImpl)printFoo(){ fmt.Println("Print Foo Impl") } func getFoo() Foo { return Bar{} } func main() { fmt.Println("Hello, playground") b := getFoo() b.printFoo() }
この更新された例では、
この手法は、インターフェイスと合成を利用して Go でポリモーフィズムを実現する方法を提供し、単一のインターフェイスをさまざまな具体的な型に使用できるようにします。
以上がGo はポリモーフィズムを強制せずにどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。