ポリモーフィズムとは何ですか?
ポリモーフィズムは、データベースの抽象化と継承に続くオブジェクト指向言語の 3 番目の機能です。ポリモーフィズムは複数の形式を指し、複数の形式を表現する能力を持っています。オブジェクト指向では、オブジェクトのタイプに応じて表現が異なる方法で処理されます。ポリモーフィズムにより、各オブジェクトが独自の方法で共通のメッセージに応答できます。ポリモーフィズムにより、ソフトウェアの柔軟性と再利用性が向上します。
doing() メソッドを作成すると、学生であれば授業用に印刷され、会社員であれば仕事用に印刷されます。
一般的な方法
ifを使って判断する
生徒たちは授業中です
スタッフが働いています
ポリモーフィズムの実践
ポリモーフィズムはプログラミング手法としても理解でき、プログラミングの最終目標は柔軟性、ポリモーフィズム、再利用、効率にほかなりません。
オブジェクト指向プログラミングの概念は、プログラマーによって追求されてきました。これまでのプログラミングはプロセス指向であり、大規模なプロジェクトには使用できませんでした。これは革命と言えます。 C# では、人間の思考を使用するプログラムの方が適しています。実際、オブジェクトを理解するのは難しくありません。たとえば、あなたは妻を探しています。見た目、彼女は何歳、苗字は何、仕事は何、どんな仕事をしているか、彼氏は何人いるかなど、これらはすべてオブジェクト (妻) が持つ特徴です。
型変換に関しては、これは言うまでもありません。
親クラスオブジェクトからサブクラスオブジェクトへの強制変換については、前提条件は、親クラスオブジェクトがサブクラスオブジェクト、つまりサブクラスオブジェクトの値を持っていることです。が親クラス変数に割り当てられています!
///
親クラス オブジェクトがサブクラス オブジェクトに変換されると、親クラス オブジェクトが呼び出されます。クラスまたはサブクラスのメソッド (または属性) はどうなりますか?
これを説明するのは難しいです。これには、サブクラス内の親クラスのメソッドを非表示にするかオーバーライドするか、親クラスが抽象クラスかどうかなど、多くの問題が含まれます。インターフェースです。待ってください。これには、特定の問題を詳細に分析する必要があります。
分析に役立つように、コードを投稿することをお勧めします。
間違いがある場合は、ご容赦ください。
簡単に言うと、ポリモーフィズムとは、OO において、特にオーバーロードされたメソッドや継承されたクラスの形式で、オブジェクトをその型に応じてさまざまな方法で処理できる機能をもつことを意味します。ポリモーフィズムはオブジェクト指向言語の重要な機能であると考えられています。
ポリモーフィズムには多くの分類があります。これらの分類を理解することで、より完全に理解できるようになります。ここではリストしません。
ポリモーフィズムとジェネリック (ジェネリック) を参照してください。 、ジェネリックです。
いわゆるジェネリックとは、特定の型に特化したコーディングを行わず、データ結果であれアルゴリズムであれ、さまざまな型に対してユニバーサルコーディングを使用することを意味します。
従来のジェネリックスは、テンプレート関数と同様の方法でパラメータを一般化することを指します。典型的なアプリケーションは、リスト、ベクトル、アルゴリズムなどの C++ STL です。
そして、OO はすでにインターフェース (Interface) と抽象クラス (Abstract Class) を通じて、本当の意味でのジェネリックスを実装することができます。私の意見では、これが OO の最も素晴らしい点、つまりポリモーフィズムの力です。伝統的な意味でのジェネリックについては、その役割はもはや以前のようなものではないと常々感じています。
ポリモーフィズムと継承 (継承)
厳密に言えば、ポリモーフィズム、継承、オーバーロードは分離されておらず、それらの間には密接な関係があり、ポリモーフィズムはこれら 2 つに基づいています (実際、継承にはオーバーロードの機能があります)。
伝統的なポリモーフィズムは、実際には仮想関数 (Virtual Function) と仮想テーブル (Virtual Table) によって実装されます (初期の C で OO 機能をシミュレートするために最も使用され、C++ の実装も同様です。後の技術は研究されていません) VT を使用するかどうかは不明ですが、当然ながら継承とは切り離せません。つまり、ポリモーフィズムは実際には継承をカバーします。
継承とポリモーフィズムは密接な関係にあるからこそ、見栄を張りがちですが、どうやって区別するのでしょうか?
よく使用される例を見てみましょう:
Abstract Class Sharpimplement IHaveSide {
public bool isSharp(){
return true;
}
public abstract int getSides();
}
Class Triangle extends Sharp {
public override int getSides() {
return 3;
}
}
Class Rectangle extends Sharp {
public override int getSides() {
return 4;
}
}
この種のクラス関係は継承と呼ばれ、これは継承によってもたらされます:
Triangel tri = new Triangle();
println("Triangle is a type of Sharp? " + tri.isSharp()); そして、このメソッドは多態性です。
シャープ Sharp = new Rectangle();
println("私のシャープには " + Sharp.getSides() + " 側面があります。");
2 つの違いは何ですか?明らかに、継承はサブクラスが親クラスを使用するための方法であり、ポリモーフィズムは親クラスがサブクラスを使用するための方法です。
技術的な違いはバインディング期間であり、遅延バインディングはポリモーフィックである必要があります。 ...本文の続き>>
http://www.bkjia.com/PHPjc/866666.html
www.bkjia.com