ホームページ >バックエンド開発 >Golang >golangで継承を実装するにはどうすればよいですか?

golangで継承を実装するにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-18 15:53:278206ブラウズ

Golang の継承実装方法: Go では組み合わせを使用して継承のセマンティクスを表現します。コードは [type Cat struct {p *Pet}func (c *Cat) Catch(){fmt.Println("* * ***")}]。

golangで継承を実装するにはどうすればよいですか?

Golang の継承実装方法:

カプセル化されたトピックを使用し、それらをプログラミング言語に変換します。ペット、B は犬をペットとしてカプセル化し、C がペットを必要とするとき、猫と犬の両方がペットになります。最終的な結果は、プログラムがまだ正常に実行されるか、プログラムが予期せずクラッシュするかのどちらかです。特定のペット 特定のニーズを満たしていない可能性があります。

この種の繰り返しの定義の問題は、異なる包装基準に起因しています。犬と猫の包装プロセスは個別に実行されており、それらが一緒に議論されていないかどうかを確認することはできません。普遍的なモデルがなければ、カオスなカプセル化は、猫はペットであり、犬もペットであるという事実につながります。

この種の複数の関連する概念のカプセル化は、このような問題を起こしやすいため、適切に統一分析は、より高いレベルの概念を抽象化し続けるために実行されます。カプセル化の概念は特に重要です。これに基づいて、元のカプセル化はこの一般的な概念から解放され、独自の特性のみを保持することができ、モデルのセマンティクスが大幅に簡素化されます。

## 通常のカプセル化以上の概念 レベルの抽象的なカプセル化概念間の関係は、オブジェクト指向における継承、つまり猫はペットから継承します。つまり、猫はペットの特性だけでなく、

同じことが犬にも当てはまります。犬はペットであり、犬は犬そのものでもあり、その特性を反映しています。

Go 言語他の主流のオブジェクト指向言語とは異なります。Go は継承機能をサポートしていないため、単一の継承はなく、継承やメソッドのオーバーライドなどの複数の複雑な概念が存在します。

Go は、通常のカプセル化とメソッドのオーバーライドの関係をどのように記述しますか?抽象カプセル化?

猫をペットとして定義しているわけではありません。犬もペットとして定義されています。ペットになる方法!

Go は、extends キーワードではなく、構造体の組み合わせを通じて継承のセマンティクスを実装します。関連するコードを参照してください。

ペットは文明的かつ武道的である必要があります。ここでは構造のフィールドは気にしないため、関連するフィールドは定義されていません。

type Pet struct {
}
func (p *Pet) Skill() {
    fmt.Println("能文能武的宠物")
}

猫はネズミを捕まえることができるペットであり、Go は継承のセマンティクスを表現するためにメソッドを組み合わせて使用​​します。

type Cat struct {
    p *Pet
}
func (c *Cat) Catch() {
    fmt.Println("老鼠天敌喵喵喵")
}

犬は自然ですナビゲーション機能を備えたペット、私の盲導犬のスーパーパワーを見てください!

type Dog struct {
    p *Pet
}
func (d *Dog) Navigate() {
    fmt.Println("自带导航汪汪汪")
}

次に、C は、ペットとしての猫や犬が文明的で武勇になれるという基本的な要件を備えているかどうか、また同時に独自の特徴を備えているかどうかをテストし始めました。

func TestExtendInstance(t *testing.T) {
    p := new(Pet)
    d := new(Dog)
    d.p = p
    // 自带导航汪汪汪
    d.Navigate()
    // 能文能武的宠物
    d.p.Skill()
    fmt.Println()
    c := new(Cat)
    c.p = p
    // 老鼠天敌喵喵喵
    c.Catch()
    // 能文能武的宠物
    c.p.Skill()
}

上記の結果は、Go 言語は extends キーワードで表現される継承機能をサポートしていませんが、組み合わせメソッドを使用することで継承セマンティクスも実現できることを証明しています。

関連学習の推奨事項:

Go 言語チュートリアル

以上がgolangで継承を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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