オブジェクト指向プログラミングの継承のGolang-3つの機能
継承の基本的な紹介と概略図
継承により、コードの再利用を解決し、プログラミングを人間の思考に近づけることができます。
複数の構造に同じプロパティ(フィールド)とメソッドがある場合、これらの構造から構造(Studentなど)を抽象化し、同じプロパティとメソッドを構造に定義できます。
他の構造では、これらの属性(フィールド)とメソッドを再定義する必要はなく、Student匿名構造をネストするだけです。[回路図を描く]
つまり、Golangでは、構造体が別の匿名構造にネストされている場合、この構造は匿名構造のフィールドとメソッドに直接アクセスできるため、継承機能を実現できます。
ネストされた匿名構造
タイプの基本文法 Goods構造体{
名前文字列
Price int
}
type Book struct {
Goods //これは、ネストされた匿名構造ですGoods Writer文字列
}
ケース
継承を実現するためにネストされた匿名構造を使用してextends01.goを改善しました。そのようなプログラミングの利点に注意してください
タイプStudent struct { Name string Age int Score float64 } func(student * Student)ShowInfo(){ fmt.Printf( "student name =%v age =%v grade =%v \ n"、student.Name、student.Age 、student.Score) } func(student * Student)SetScore(score float64){student.Score = score } type Pupil struct { Student } func(pupil * Pupil)Testing(){ fmt.Println( "試験の内容は異なります、テスト中..... \ n ") } タイプGraduate struct { Student } func(大学院* Graduate)Testing(){ fmt.Println("試験の内容が異なり、試験が進行中..... \ n ") }
継承はプログラミングに利便性をもたらします
1)コードの再利用性が向上しました
2)コードのスケーラビリティと保守性が向上しました
継承の詳細な議論
1)構造は、ネストされた匿名構造のすべてのフィールドとメソッドを使用できます。つまり、大文字または小文字のフィールドとメソッドを使用できます。【イラスト】
2)図に示すように、匿名構造のフィールドアクセスを簡略化できます。
上記のコードの要約
(1)bを介してフィールドまたはメソッドに直接アクセスする場合、実行プロセスは次のようになります。たとえば、b.Name
(2)コンパイラーは、最初にbに対応する型がNameであるかどうかを確認し、ある場合は直接Bを呼び出します。タイプ
の名前フィールド(3)がない場合は、Bに埋め込まれた匿名構造体Aに移動して、名前フィールドが宣言されているかどうかを確認します。宣言されている場合は、検索を続行しない場合はそれを呼び出します。見つからない場合は、エラーを報告します。
3)構造体と匿名構造体が同じフィールドまたはメソッドを持つ場合、コンパイラーは最も近いアクセス原理を使用してアクセスします。匿名構造体のフィールドとメソッドにアクセスする場合は、匿名構造体の名前で区別できます[例]
4)構造が2つ(またはそれ以上)の匿名構造に埋め込まれている。たとえば、2つの匿名構造に同じフィールドとメソッドがある(同時に、構造自体に同じ名前のフィールドとメソッドがない)場合、アクセス時に匿名性を明示的に指定する必要があります。構造名、それ以外の場合はコンパイルエラー。【イラスト】
5)構造体が名前付き構造をネストしている場合、このパターンは組み合わせです。組み合わせ関係である場合、組み合わせた構造のフィールドまたはメソッドにアクセスするときは、構造の名前を指定する必要があります
6)ネストされた匿名構造本文の後に、構造体変数(インスタンス)を作成するときに各匿名構造体フィールドの値を直接指定することもできます
演習構造の匿名フィールドは、基本データ型、それにアクセスする方法、次のコードが出力するものです
説明
1)構造体にint型の匿名フィールドがある場合、2番目にすることはできません。
2)複数のintフィールドが必要な場合は、intフィールドの名前を指定する必要があります
オブジェクト指向プログラミング-複数継承
複数継承の説明
構造体が複数の匿名構造をネストする場合、構造はネストされた匿名構造のフィールドとメソッドに直接アクセスできるため、多重継承を実現できます。 多重継承の使用を説明するためのケースによる
ケースのデモ
多重継承の詳細
1)埋め込まれた匿名構造が同じフィールド名またはメソッド名を持っている場合、アクセス時に匿名構造タイプ名で区別する必要があります。[ケースデモ]
2)コードの簡素化を確実にするために、多重継承を使用しないことをお勧めします