そのシンプルさと同時実行性で知られるプログラミング言語である Go では、ポリモーフィズムの概念が独特の形式をとります。オブジェクト指向プログラミングの定番であるポリモーフィズムを使用すると、さまざまなクラスのオブジェクトをその親クラスまたはインターフェイス クラスのオブジェクトとして扱うことができます。
従来のオブジェクト指向言語で次のシナリオを考えてみましょう。
type Foo { ... } type Bar : Foo { ... } func getFoo() Foo { return Bar{...} }
そのようなシナリオでは、getFoo() はポリモーフィズムを利用して Bar クラスのインスタンスをシームレスに返すことが期待されます。ただし、Go では、このアプローチではエラーが発生し、getFoo() が Foo クラスのインスタンスを返さなければならないことが強調されています。
Go のポリモーフィズムに対するアプローチは若干異なります。前に説明した機能を複製するために、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() }
Foo インターフェイスを実装し、FooImpl 構造体を構成することにより、Bar 型は Foo インターフェイスの役割を引き受けます。その結果、getFoo() は、Foo インターフェイスに準拠した Bar 型のインスタンスを返すことができます。
これらのメカニズムを通じて、Go は、従来のオブジェクト指向の継承とは異なりますが、次のことを可能にする多態性の形式を提供します。インターフェイスに基づいたオブジェクトの動的な処理。
以上がGo は伝統的な継承を行わずにポリモーフィズムをどのように実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。