Golang の継承実装方法: Go では組み合わせを使用して継承のセマンティクスを表現します。コードは [type Cat struct {p *Pet}func (c *Cat) Catch(){fmt.Println("* * ***")}]。
Golang の継承実装方法:
カプセル化されたトピックを使用し、それらをプログラミング言語に変換します。ペット、B は犬をペットとしてカプセル化し、C がペットを必要とするとき、猫と犬の両方がペットになります。最終的な結果は、プログラムがまだ正常に実行されるか、プログラムが予期せずクラッシュするかのどちらかです。特定のペット 特定のニーズを満たしていない可能性があります。
この種の繰り返しの定義の問題は、異なる包装基準に起因しています。犬と猫の包装プロセスは個別に実行されており、それらが一緒に議論されていないかどうかを確認することはできません。普遍的なモデルがなければ、カオスなカプセル化は、猫はペットであり、犬もペットであるという事実につながります。
この種の複数の関連する概念のカプセル化は、このような問題を起こしやすいため、適切に統一分析は、より高いレベルの概念を抽象化し続けるために実行されます。カプセル化の概念は特に重要です。これに基づいて、元のカプセル化はこの一般的な概念から解放され、独自の特性のみを保持することができ、モデルのセマンティクスが大幅に簡素化されます。
## 通常のカプセル化以上の概念 レベルの抽象的なカプセル化概念間の関係は、オブジェクト指向における継承、つまり猫はペットから継承します。つまり、猫はペットの特性だけでなく、 同じことが犬にも当てはまります。犬はペットであり、犬は犬そのものでもあり、その特性を反映しています。Go 言語他の主流のオブジェクト指向言語とは異なります。Go は継承機能をサポートしていないため、単一の継承はなく、継承やメソッドのオーバーライドなどの複数の複雑な概念が存在します。
type Pet struct { } func (p *Pet) Skill() { fmt.Println("能文能武的宠物") }
type Cat struct { p *Pet } func (c *Cat) Catch() { fmt.Println("老鼠天敌喵喵喵") }
type Dog struct { p *Pet } func (d *Dog) Navigate() { fmt.Println("自带导航汪汪汪") }
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() }
関連学習の推奨事項:
以上がgolangで継承を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。