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

Patricia Arquette
リリース: 2024-11-06 19:12:02
オリジナル
197 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!