ポリモーフィズムという言葉は、多くの形式を持つことを意味します。簡単に言うと、Java ポリモーフィズムは、メッセージを複数の形式で表示できる機能として定義できます。この記事では、ポリモーフィズムとは何か、そしてその型について学びます。
Java におけるポリモーフィズムの実例 :人は同時に異なる特性を持つことができます。男性は同時に父親であり、夫であり、従業員でもあるのと同じです。したがって、同じ人でも状況が異なれば、異なる行動をとります。これをポリモーフィズムと呼びます。
Javaのポリモーフィズムとは何ですか?
ポリモーフィズムは、オブジェクト指向プログラミングの重要な機能の 1 つと考えられています。ポリモーフィズムにより、単一のアクションをさまざまな方法で実行できるようになります。言い換えれば、ポリモーフィズムにより、1 つのインターフェイスを定義して複数の実装を行うことができます。ポリという言葉は多くを意味し、モーフは形を意味するので、多くの形を意味します。
Java ポリモーフィズムの種類
Java では、ポリモーフィズムは主に 2 つのタイプに分類されます。
- コンパイル時のポリモーフィズム
- ランタイムポリモーフィズム
Java におけるコンパイル時のポリモーフィズム
静的多態性とも呼ばれます。このタイプの多態性は、関数のオーバーロードまたは演算子のオーバーロードによって実現されます。
注記: ただし、Java は演算子のオーバーロードをサポートしていません。
メソッドのオーバーロード
同じ名前でパラメータが異なる複数の関数がある場合、これらの関数は次のように呼ばれます。 過負荷な 。関数は、引数の数の変更や引数の型の変更によってオーバーロードされる可能性があります。
例 1:
ジャワ
数字で言えば100万
// Java Program for Method overloading> // By using Different Types of Arguments> // Class 1> // Helper class> class> Helper {> > // Method with 2 integer parameters> > static> int> Multiply(> int> a,> int> b)> > {> > // Returns product of integer numbers> > return> a * b;> > }> > // Method 2> > // With same name but with 2 double parameters> > static> double> Multiply(> double> a,> double> b)> > {> > // Returns product of double numbers> > return> a * b;> > }> }> // Class 2> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Calling method by passing> > // input as in arguments> > System.out.println(Helper.Multiply(> 2> ,> 4> ));> > System.out.println(Helper.Multiply(> 5.5> ,> 6.3> ));> > }> }> |
>
>出力
8 34.65>
例 2:
ジャワ
scan.next Java
// Java program for Method Overloading> // by Using Different Numbers of Arguments> // Class 1> // Helper class> class> Helper {> > // Method 1> > // Multiplication of 2 numbers> > static> int> Multiply(> int> a,> int> b)> > {> > // Return product> > return> a * b;> > }> > // Method 2> > // // Multiplication of 3 numbers> > static> int> Multiply(> int> a,> int> b,> int> c)> > {> > // Return product> > return> a * b * c;> > }> }> // Class 2> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Calling method by passing> > // input as in arguments> > System.out.println(Helper.Multiply(> 2> ,> 4> ));> > System.out.println(Helper.Multiply(> 2> ,> 7> ,> 3> ));> > }> }> |
>
>出力
8 42>
コンパイル時ポリモーフィズムのサブタイプ
1. 関数のオーバーロード
これは C++ の機能で、複数の関数が同じ名前を持つことができますが、パラメーター リストは異なります。コンパイラは、関数に渡される引数の数と型に基づいて、どの関数を呼び出すかを決定します。
2. 演算子のオーバーロード
これは、+、-、* などの演算子をユーザー定義のデータ型に適用するときに追加の意味を与えることができる C++ の機能です。
3. テンプレート
これは C++ の強力な機能であり、汎用関数やクラスを作成できるようになります。テンプレートは、関数またはクラスのファミリーを作成するための青写真です。
Java の実行時ポリモーフィズム
これは、動的メソッド ディスパッチとも呼ばれます。これは、オーバーライドされたメソッドへの関数呼び出しが実行時に解決されるプロセスです。このタイプの多態性は、メソッドのオーバーライドによって実現されます。 メソッドのオーバーライド 一方、派生クラスに基本クラスのメンバー関数の 1 つが定義されている場合に発生します。その基本関数は次のように言われています オーバーライドされた 。
例
ジャワ
Javaのnullチェック
// Java Program for Method Overriding> // Class 1> // Helper class> class> Parent {> > // Method of parent class> > void> Print()> > {> > // Print statement> > System.out.println(> 'parent class'> );> > }> }> // Class 2> // Helper class> class> subclass1> extends> Parent {> > // Method> > void> Print() { System.out.println(> 'subclass1'> ); }> }> // Class 3> // Helper class> class> subclass2> extends> Parent {> > // Method> > void> Print()> > {> > // Print statement> > System.out.println(> 'subclass2'> );> > }> }> // Class 4> // Main class> class> GFG {> > // Main driver method> > public> static> void> main(String[] args)> > {> > // Creating object of class 1> > Parent a;> > // Now we will be calling print methods> > // inside main() method> > a => new> subclass1();> > a.Print();> > a => new> subclass2();> > a.Print();> > }> }> |
>
グライバッハ正規形
>出力
subclass1 subclass2>
上記のコードの説明:
このプログラムでは、子クラスのオブジェクトが作成されると、子クラス内のメソッドが呼び出されます。これは、親クラスのメソッドが子クラスによってオーバーライドされるためです。メソッドがオーバーライドされるため、このメソッドは子クラス内の親メソッドよりも優先されます。したがって、子クラス内の本体が実行されます。
実行時ポリモーフィズムのサブタイプ
私。仮想機能
これにより、派生クラスのオブジェクトが基本クラスのオブジェクトであるかのように動作できるようになります。派生クラスは、基本クラスの仮想関数をオーバーライドして、独自の実装を提供できます。関数呼び出しは、オブジェクトの実際の型に応じて実行時に解決されます。
図 –
Java のポリモーフィズムは、異なるクラスのオブジェクトを共通のクラスのオブジェクトとして扱うことを可能にする概念です。これにより、オブジェクトは特定のクラス タイプに基づいて異なる動作を行うことができます。
Java におけるポリモーフィズムの利点
- 異なるクラスのオブジェクトを共通のクラスのオブジェクトとして扱えるようにすることで、コードの再利用性が向上します。
- 記述および保守が必要なコードの量を削減することで、コードの読みやすさと保守性が向上します。
- 動的バインディングをサポートし、オブジェクトの実際のクラスに基づいて、実行時に正しいメソッドを呼び出すことができます。
- オブジェクトを単一の型として扱うことができるようになり、異なる型のオブジェクトを処理できる汎用コードの作成が容易になります。
Java におけるポリモーフィズムの欠点
- 特にコードが複雑な場合、オブジェクトの動作を理解することがさらに難しくなる可能性があります。
- ポリモーフィックな動作では実行時に追加の計算が必要になる可能性があるため、これによりパフォーマンスの問題が発生する可能性があります。