Go 言語でカプセル化と継承を実装する方法
カプセル化と継承は、オブジェクト指向プログラミングにおける 2 つの重要な概念であり、コードをよりモジュール化して保守しやすくし、コードを再利用する機会も提供します。供給される。この記事では、Go 言語でカプセル化と継承を実装する方法と、対応するコード例を紹介します。
カプセル化とは、データと関数をカプセル化し、実装の詳細を隠し、外部使用に必要なインターフェイスのみを公開することです。 Go 言語では、カプセル化はエクスポートされた識別子とエクスポートされていない識別子によって実現されます。頭文字が大文字の識別子は他のパッケージからアクセスできますが、頭文字が小文字の識別子は現在のパッケージ内でのみアクセスできます。
以下は、Go 言語でカプセル化する方法を示すサンプル コードです:
package main import "fmt" // 定义一个结构体 type Person struct { name string // 首字母小写,非导出标识符 age int // 首字母小写,非导出标识符 } // 设置姓名 func (p *Person) SetName(name string) { p.name = name } // 获取姓名 func (p *Person) GetName() string { return p.name } func main() { p := Person{} p.SetName("John") fmt.Println(p.GetName()) // Output: John }
上記のコードでは、名前フィールドと年齢フィールドの最初の文字を使用して Person 構造体を定義します。は小文字で、エクスポートされない識別子であり、現在のパッケージ内でのみアクセスできることを示します。 SetNam メソッドと GetName メソッドを使用して、name フィールドの値を設定および取得します。 main 関数では、タイプ Person の変数 p を作成し、SetNam メソッドと GetName メソッドを呼び出して name フィールドの値を設定および取得します。
継承は、オブジェクト指向プログラミングでコードの再利用を実現する方法であり、継承を通じて既存の型を拡張できます。 Go 言語には明示的な継承キーワードはありませんが、匿名フィールドと入れ子構造を通じて継承の効果を実現できます。
以下は、Go 言語で継承を実装する方法を示すサンプル コードです。
package main import "fmt" // 定义一个基类 type Animal struct { name string } // 基类方法 func (a *Animal) move() { fmt.Println("Moving...") } // 定义一个派生类 type Dog struct { Animal // 匿名字段,实现继承 breed string } // 派生类方法 func (d *Dog) bark() { fmt.Println("Barking...") } func main() { d := Dog{ Animal: Animal{ name: "Tom", }, breed: "Golden Retriever", } d.move() // Output: Moving... d.bark() // Output: Barking... fmt.Println(d.name) // Output: Tom }
上記のコードでは、move メソッドを含む Animal 基本クラスを定義します。次に、Dog 派生クラスが定義され、継承の効果を実現するために匿名フィールドを介して Animal 基本クラスが埋め込まれます。 Dog 派生クラスで、bark メソッドを定義します。 main 関数では、Dog 型の変数 d を作成し、move メソッドと bark メソッドを呼び出して継承の効果を検証しました。
概要
カプセル化と継承を通じて、コードをモジュール化し、コードの保守性と再利用性を向上させることができます。 Go 言語では、エクスポートされた識別子とエクスポートされていない識別子を通じてカプセル化を実現でき、匿名フィールドとネストされた構造を通じて継承を実現できます。これらの機能により、Go 言語はオブジェクト指向プログラミングで優れたパフォーマンスを発揮します。
以上がGo言語でカプセル化と継承を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。