多態性 は、基底クラス変数を使用してサブクラスオブジェクトを参照し、オブジェクトが属するサブクラスを追跡し、プログラムのコンパイル時にサブクラスがわからなくても、サブクラスのオーバーライドされたメソッドを使用します。
すごい!それは一口です。それは、パラメータが特定の型を呼び出すたびに、その型のサブクラスから作成されたオブジェクトを使用できることです。
<! - 1 - >たとえば、尊敬できるゲームTic-Tac-Toeを再生できるアプリケーションを開発していて、プレーヤーの1つを表すPlayerという名前のクラスを作成するとします。このクラスには、プレーヤーがマークしたいボードの四角形を示すintを返すpublicというメソッドがあります。単純に物事を保つために、moveメソッドは、盲目的にボード上の最初の空の四角形を移動として選択します。それは、もちろん、Tic-Tac-Toeで勝つためのひどい戦略です。したがって、BetterPlayerと呼ばれるクラスのより良いバージョンを作成することに決めました。 BetterPlayerクラスはPlayerクラスのサブクラスとして実装しますが、BetterPlayerクラスがPlayerクラスよりも賢明な移動を行うようにmoveメソッドをオーバーライドします。
public void MakeAMove(Player p){int i = p。 move();あなたは次のようにMakeAMoveメソッドを呼び出すことができます:
int m = MakeAMove(new Player());
この場合、MakeAMoveメソッドはボード上の最初の空の四角形を返します。
<! - 3 - >
しかし、あなたはこれを次のように呼んでいるとしましょう:
int m = MakeAMove(new BetterPlayer());この場合、BetterPlayerクラスがより良いアルゴリズムを使用してプレイヤーの次の移動を決定するため、MakeAMoveメソッドはより良い考えられた動きを返します。