人々の大多数のオブジェクト指向(カプセル化、継承、多態性)の三つの特性が知っている必要があります。簡単に最初の二つの言葉を理解します。この記事では、主にオブジェクト指向の多型についてお話します。
多型は何ですか?
同じ操作の異なるオブジェクトは、異なる実行結果を生成します。これは多型です。それはまた、多型が含まれています、書き換え、仮想メソッド、抽象メソッドをオーバーロードします。
1は、過負荷に
過負荷に何を?
二つ以上の方法、方法の異なるパラメータリストと同じスコープ内の同じ関数名がオーバーロードと呼ばれています。:オーバーロードは、三つの特徴がある
1.1:メソッド名が同じでなければなりません。
1.2:パラメータリストは異なっている必要があります。
1.3:戻り値は同じではないかもしれません。
コラムのような:
1匹の 公共 ボイド動物() 2 { 3 Console.WriteLineを(" 睡觉" )。 4 } 5 公共 ボイド動物(INTの時間) 6 { 7 Console.WriteLineを(" {0}点睡觉" 、時間)。 8 }
2、書き換え
書き換えることは何ですか?サブクラスは、基本クラスで定義されたメソッドの異なる実装を繰り返す彼らのニーズを満たすために必要です。overrideキーワードを使用する必要性を書き換えます。この方法は、仮想または抽象メソッドでなければならない基本クラスのメソッドをオーバーライドする必要です。リライト機能:
2.1:同じメソッド名を。
2.2:同じ引数リスト。
2.3:同じ値を返します。
3、仮想メソッド
仮想何ですか?
この方法は、オーバーライド基本クラスは、サブクラスの定義仮想メソッドと呼ばれることができます。仮想キーワードの定義を使用します。サブクラスは、仮想メソッドをオーバーライドしない場合があります。コラムのような:
1 クラス動物 2 { 3。 公的 仮想 ボイドEatFood() 4。 { 5。 Console.WriteLineを(" 食べる" ); 6 } 7 }
次のような仮想メソッドを直接呼び出すことができ、
1つの動物A = 新たな動物()。 2 a.EatFood()。
出力は次のとおりです。
食べます
次のようなサブクラスでオーバーライド仮想メソッド、
1 クラスの鳥:動物 2 { 3 公共 オーバーライド ボイドEatFood() 。4 { 5 Console.WriteLineを(" 昆虫を食べる鳥" ); 6 } 7 }
4、抽象メソッド
抽象メソッドとは何ですか?
そして、この方法は、メソッドと呼ばれる抽象基底クラスで定義されたサブクラスでオーバーライドする必要があります。キーワード抽象的な定義を使用してください。注:抽象メソッドが抽象クラスで定義することができます。
抽象メソッドと仮想メソッドの違い:抽象クラスとしては抽象メソッドを実現することはできませんことを、抽象メソッドを呼び出すことはできません、インスタンス化することはできません。
シナリオ:
実際には、多型を理解することは非常に難しいことではありません。主に実際の開発を活用する方法について説明します。だから今、私は例を与える:大規模工場は現在、アップル、Huawei社、OPPO電話、それぞれで使用の携帯電話のチップが同じで生成することができ、画面は同じマザーボードではありません、Huawei社の携帯電話は、赤外線ました。どのようにそれを達成するためでしょうか?
1 パブリック 抽象 クラス電話 2 { 3 // 電話チップ 4。 公共 文字列チップ{ GET、SET ;} = " チップ" ; 5 6。 // 電話画面 7。 パブリック 文字列画面{ GET、SET ;} 8。 9。 // マザーボード 10 公衆 ストリングマザーボード{ GET、SET ;} 11 12である // 携帯電話の製造方法 13 パブリック 抽象 ストリング製造(); 14 } 15 16 // iPhone 17。 パブリック クラスのiPhone:電話 18である { 19。 公共 オーバーライド ストリング製造() 20 { 21は Console.WriteLineを(" スタート生産iPhone " ) 22は、 リターンチップ+画面+ マザーボード; 23である } 24 } 25 26である 。// OPPO 27の パブリック クラスOppOphone:電話 28 { 29 公共 オーバーライド ストリング製造() 30 { 31は Console.WriteLineを(" スタート生産OPPO電話" ); 32 リターンチップ+ +画面メインボード、 33である } 34である } 35 36 // Huaweiで 37 [ パブリック クラスHuaweiPhone:電話 38 { 39 // Huawei社の携帯電話は、赤外線た 40 公衆 ストリング InfraredRay { GET、SET;} 41である 42ことである 公共 オーバーライド ストリング製造() 43は 、{ 44で Console.WriteLineを(" 開始生産Huawei社の携帯電話" ); 45 リターンチップマザーボード+ + +画面InfraredRay; 46である } 47 }
だから今リンゴとHuawei社の携帯電話を生産します:
1つの 静的 ボイドメイン(文字列[]引数) 2 { 3。 // 製造iPhone 4 のiPhone iPhone = 新しい新規のiPhone()= {画面" アップル画面"、マザーボード= " アップルボード" }; 5 Console.WriteLineを(iphone.Production ()); 6 。7 // 生産Huawei社の携帯電話 。8 HuaweiPhone HUAWEI = 新しい新しい HuaweiPhone()= {画面" Huawei社画面"、マザーボード= " Huawei社会"、InfraredRay = "红外线" }; 9 Console.WriteLineを(huawei.Production()); 10 Console.ReadKey(); 11 }
出力の実装:
始まったAppleの携帯電話の生産
チップアップルスクリーンボードは
生産を開始Huawei社の携帯電話用
チップ華為Huawei社は、赤外線スクリーンをマザーボード
私たちは、iphoneのHuawei社のオブジェクトとオブジェクトは生産は異なる結果をもたらしたのと同じ方法を実装している見ることができます。多型DOの定義を覚えていますか?異なるオブジェクトが同じ操作の異なる実行結果を持っています。はい、これは多型です。多型の影響:ビューのポイントとして親クラスのオブジェクトの異なるサブクラスは、あなたは、需要の変化に適応するために、一般的なプログラミングを行うための共通のコードを記述し、オブジェクトの異なるサブクラスの違いをマスクすることができます。
この記事では、間違った場所場合だけでなく、偉大な神のポインティングを見て、最後に来ました。
オリジナルから:C#のオブジェクト指向-ポリモーフィズム-持っていたYaping個人的なオリジナルのブログ