Go 言語のポリモーフィズム
お気づきのとおり、Go は継承によるポリモーフィズムという従来のオブジェクト指向の概念をサポートしていません。ただし、インターフェイスと合成を使用して同様の結果を達成する他の方法もあります。
インターフェイスと合成
Go では、インターフェイスは、型が実装する必要があるメソッドを指定するコントラクトを定義します。 。合成を使用すると、他の型を埋め込んで新しい型を作成できます。インターフェイスと構成を組み合わせることで、ポリモーフィズムの一種を実現できます。
たとえば、次のコードを考えてみましょう:
<code class="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() }</code>
この例では:
このコードを実行すると、次の出力が表示されます。
Hello, playground Print Foo Impl
これは、インターフェイスと構成を使用して Go でポリモーフィズムの形式を実現する方法を示しています。インターフェイスを定義すると、さまざまな型が共通のメソッド セットを共有するようにできます。型を埋め込むことで、他の複数の型の機能を組み合わせた新しい型を作成できます。これにより、さまざまな型を統一した方法で扱うコードを作成できます。
以上がGo はどのようにして継承なしでポリモーフィズムを実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。