ホームページ  >  記事  >  バックエンド開発  >  Go は伝統的な継承を行わずにポリモーフィズムをどのように実現するのでしょうか?

Go は伝統的な継承を行わずにポリモーフィズムをどのように実現するのでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 19:12:02185ブラウズ

How Does Go Achieve Polymorphism Without Traditional Inheritance?

Go Lang のポリモーフィズム: オブジェクト指向の概念の探求

そのシンプルさと同時実行性で知られるプログラミング言語である 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。