ポリモーフィズム Java (静的および動的)
⚡ スマートサマリー
ポリモーフィズム Java 1つのインターフェースで複数のフォームを表現できるため、同じメソッド名でも関連するクラス間で異なる動作をさせることができます。これはオブジェクト指向設計の柱であり、柔軟性、コードの再利用性、そして既存の銀行、医療、企業システムのクリーンな拡張を促進します。

ポリモーフィズムとは何か Java?
ポリモーフィズム Java 継承によって1つ以上のクラスまたはオブジェクトが相互に関連付けられている場合に発生します。これは、オブジェクトがさまざまな形態をとることができる能力です。継承によってユーザーは属性とメソッドを継承でき、ポリモーフィズムはこれらのメソッドを使用してさまざまなタスクを実行します。目標はコミュニケーションですが、アプローチは異なる場合があります。
例えば、スマートフォンはコミュニケーションに使用されます。コミュニケーションの方法は、通話、テキストメッセージ、画像メッセージ、または電子メールです。目的は共通で、つまりコミュニケーションですが、アプローチは異なります。この行動は、 ポリモーフィズムこれからポリモーフィズムについて学びます Java サンプルコード、図、および段階的な説明付き。
詳しくはこちら こちら ビデオにアクセスできない場合
ポリモーフィズムを使用する理由 Java?
ポリモーフィズム Java このパターンは、コードの柔軟性、再利用性、保守性を向上させるために用いられます。親型の単一の参照変数が複数の子オブジェクトを指すことができるため、同じ呼び出しがどのサブクラスが指定されても適応します。このパターンにより、テスト済みのコードは変更されずに済み、特殊なサブクラスによって新しい動作が追加されます。SpringやJakarta EEといったフレームワークがこのパターンを採用しているのはまさにそのためです。
Java OOP におけるポリモーフィズムの例
親クラスを 1 つ考えてみましょう。 アカウント 預金と引き出しの機能を備えています。Account クラスには 2 つの子クラスがあります。預金と引き出しの操作は、普通預金口座と当座預金口座で同じなので、Account クラスから継承したメソッドが機能します。
Java ポリモーフィズムの例
ソフトウェア要件の変更
ソフトウェア業界ではよくあることですが、要件仕様に変更があります。当座貸越機能付きの特権銀行口座の機能を追加する必要があります。当座貸越とは、顧客が口座の利用可能残高を超える金額を引き出すことができる機能です。特権口座の引き出し方法は新たに実装する必要がありますが、貯蓄口座と当座預金口座のテスト済みコードは変更されません。この分離が利点です。 おっとっと.
ステップ1) 普通預金口座の引き出しメソッドが呼び出されると、親クラスであるAccountクラスで定義されているメソッドが実行されます。
ステップ2) 特権口座(当座貸越機能)の引き出しメソッドが呼び出されると、特権クラスで定義されている引き出しメソッドが実行されます。このディスパッチは オブジェクト指向プログラミングにおけるポリモーフィズム.
メソッドオーバーライド Java
メソッドオーバーライドとは、サブクラス内でスーパークラスのメソッドを再定義するプロセスです。サブクラスは同じコンテキストを保持します。tract ですが、プログラム実行時に選択される新しい実装を提供します。
メソッドオーバーライドのルール
- メソッドシグネチャ、つまりメソッド名、パラメータリスト、および戻り値の型は、完全に一致する必要があります。
- オーバーライドされたメソッドはアクセス範囲を広げることはできますが、狭めることはできません。基底クラスでメソッドがプライベートである場合、子クラスはそれをパブリックにすることはできますが、その逆はできません。
例:
class Doctor{ public void treatPatient(){ // treatPatient method } class Surgeon extends Doctor{ public void treatPatient(){ // treatPatient method } } class Run{ public static void main (String args[]){ Doctor doctorObj = new Doctor(); // treatPatient method in class Doctor will be executed doctorObj.treatPatient(); Surgeon surgeonObj = new Surgeon(); // treatPatient method in class Surgeon will be executed surgeonObj.treatPatient(); } }
メソッドのオーバーロードとメソッドのオーバーライドの違い
メソッドのオーバーロードは、同じクラス内で同じメソッド名を持ちながら、異なるシグネチャを持つメソッドが使用される場合に発生します。メソッドのオーバーライドは、親クラスと子クラスの関係において、サブクラスがスーパークラスで宣言されたメソッドを再定義する場合に発生します。
| メソッドオーバーロードとは、同じクラス内で、同じ名前を持つ複数のメソッドが異なるシグネチャを持つ状態を指します。 | メソッドのオーバーライドとは、スーパークラスのメソッドのいずれかをサブクラスで再定義することです。この場合、メソッドのシグネチャは変更されません。 |
例:
void sum (int a , int b); void sum (int a , int b, int c); void sum (float a, double b); |
例:
class X{ public int sum(){ // some code } } class Y extends X{ public int sum(){ //overridden method //signature is same } } |
動的ポリモーフィズムとは何ですか?
オブジェクト指向プログラミングにおける動的ポリモーフィズムとは、スーパークラスとサブクラスにおいて、同じ名前とシグネチャを持つ複数のメソッドを定義できる仕組みです。オーバーライドされたメソッドの呼び出しは、JVM内部の動的バインディングによって実行時に解決されます。
動的多態性の例
スーパークラスの参照変数は、サブクラスのオブジェクトを参照できます。
Doctor obj = new Surgeon();
次の記述について考えてみましょう。
obj.treatPatient();
ここで参照変数 オブジェクト は親クラスのものですが、それが指しているオブジェクトは子クラスのものです。これは、ポリモーフィズムの図に示されています。
呼び出し obj.treatPatient() サブクラス Surgeon の treatPatient() メソッドが実行されます。基底クラス参照を使用してメソッドを呼び出す場合、呼び出されるメソッドは、参照が指している実際のオブジェクトに基づいて JVM によって決定されます。 オブジェクト Doctor への参照であり、Surgeon オブジェクトを指しているため、Surgeon のメソッドを呼び出します。決定は実行時に行われるため、このように呼ばれます。 動的ポリモーフィズム あるいは実行時多態性。
静的ポリモーフィズムと動的ポリモーフィズムの違い
静的多態性 Java はコンパイル時にメソッド呼び出しのための情報を収集するタイプのポリモーフィズムであり、動的ポリモーフィズムは実行時にメソッド呼び出しのための情報を収集するタイプのポリモーフィズムです。
| これはメソッドのオーバーロードに関連しています。 | これはメソッドのオーバーライドに関連しています。 |
| エラーが発生した場合は、コンパイル時に解決されます。コンパイル時にコードは実行されないため、名前は静的です。
例: void sum (int a , int b); void sum (float a, double b); int sum (int a, int b); //compiler gives error. |
参照変数がオーバーライドされたメソッドを呼び出す場合、呼び出されるメソッドは、その参照変数が指すオブジェクトによって決定されます。これはコードの実行時にのみ決定できるため、メソッド名は動的になります。
例: //reference of parent pointing to child object Doctor obj = new Surgeon(); // method of child called obj.treatPatient(); |
スーパーキーワード Java
Surgeon クラスの treatPatient メソッドが Doctor クラスで定義された機能を実行した後、独自の動作を実行したい場合はどうすればよいでしょうか? この場合、キーワード super 子クラスから親クラスのメソッドにアクセスするために使用できます。Surgeon クラスの treatPatient メソッドは次のように記述できます。
treatPatient(){
super.treatPatient();
//add code specific to Surgeon
}
キーワード super を使用すると、サブクラス内からスーパークラスの任意のデータ メンバーまたはメソッドにアクセスできます。次に、super キーワードについて学習します。 継承、および多型性 Java サンプルプログラム付き。
例:継承、ポリモーフィズム、およびスーパーキーワードを学ぶ
ステップ1) 次のコードをエディターにコピーします。
public class Test{ public static void main(String args[]){ X x= new X(); Y y = new Y(); y.m2(); //x.m1(); //y.m1(); //x = y;// parent pointing to object of child //x.m1() ; //y.a=10; } } class X{ private int a; int b; public void m1(){ System.out.println("This is method m1 of class X"); } } class Y extends X{ int c; // new instance variable of class Y public void m1(){ // overridden method System.out.println("This is method m1 of class Y"); } public void m2(){ super.m1(); System.out.println("This is method m2 of class Y"); } }
ステップ2) コードを保存、コンパイル、実行してください。出力結果を確認してください。
ステップ3) 6行目から9行目までのコメントを解除してください。コードを保存、コンパイル、実行してください。出力結果を確認してください。
ステップ4) 10行目のコメントを解除してください。コードを保存してコンパイルしてください。
ステップ5) エラー = ? これは、サブクラスがスーパークラスのプライベートメンバーにアクセスできないためです。





