Javaのポリモーフィズムのタイプ[例を含む静的および動的ポリモーフィズム]
公開: 2021-06-18目次
Javaのポリモーフィズムとは何ですか?
オブジェクト指向プログラミング(OOP)の重要な概念の1つはポリモーフィズムです。これは、単一のアクションをさまざまな方法で実行できることを意味します。 それはギリシャ語から派生しています:ポリとモーフは多くと形を意味します。 継承によって関連付けられる場合、さまざまな形式が存在します。
異なるクラスからメソッドと属性を継承する継承のように、ポリモーフィズムはそれらのメソッドを適用し、異なるタスクを実行します。 オブジェクトは、ポリモーフィズムによってさまざまな形に成形することができます。
つまり、エンティティはさまざまなシナリオでさまざまな操作を実行できます。 オブジェクト指向プログラミングでのポリモーフィズムの最も一般的な使用法の1つは、親クラス参照を使用して子クラスオブジェクトを参照する場合です。 さまざまなOOPの概念と例の詳細をお読みください。
Javaのポリモーフィズムは、次の3つの方法で実現できます。
メソッドのオーバーライド:スーパークラスとサブクラスが同じメソッドで構成されている場合、メソッドのオーバーライドとは、スーパークラスのメソッドをサブクラスのメソッドでオーバーライドするプロセスを指します。 その結果、同じ方法が異なる操作を実行する異なる条件で使用されます。
プログラムの出力:
Javaプログラミング言語
一般的な英語
- メソッドのオーバーロード:メソッドのオーバーロードとは、同じ名前でパラメーターが異なるメソッドを作成するプロセスを指します。 例としては、void func(){…}、void func(int a){…}、float func(double a){…}、float func(int a、float b){…}があります。
出力
**********
##########
- 演算子のオーバーロード:演算子のオーバーロードは、演算子が異なるオペランドで異なる動作をするJavaの概念です。 例は次のとおりです。
- 演算子「+」は、数値の加算と文字列の連結の両方で使用できます。
数値加算 | 文字列の連結 |
int a = 5; int b = 6; int sum = a + b; //出力=11 | String first =“ Python“; 文字列second=“プログラミング”; 名前=最初+2番目; //出力=Pythonプログラミング |
- 演算子&、|、および! 論理的およびビット単位のオーバーロードに使用できます。
Javaのポリモーフィズムの種類
オブジェクト指向プログラミングは、抽象化、カプセル化、継承、およびポリモーフィズムという4つの基本概念に焦点を当てています。 ポリモーフィズムは、クラスとデータ型に基づいてオブジェクトを異なる方法で処理する機能です。
Javaには、コンパイル時のポリモーフィズムとJavaの実行時のポリモーフィズムの2種類のポリモーフィズムがあります。 このJavaポリモーフィズムは、静的ポリモーフィズムおよび動的ポリモーフィズムとも呼ばれます。
1.静的ポリモーフィズム(またはコンパイル時のポリモーフィズム)
他のほとんどのOOPプログラミング言語と同様に、 Javaポリモーフィズムでは、クラス内に複数のメソッドを組み込むことができます。 メソッドは同じ名前を使用しますが、パラメーターは異なります。 これは静的ポリモーフィズムを表しています。 このポリモーフィズムはコンパイラ時間中に解決され、メソッドのオーバーロードによって実現されます。 パラメータセットが異なる必要がある3つの基準が提供されています。
- パラメータ番号は変更する必要があります。
- パラメータタイプは異なる必要があります。
- パラメータの順序が異なります。 たとえば、メソッドが文字列とlongを受け入れるのに対し、他のメソッドはlongと文字列を受け入れる場合です。 ただし、このタイプの順序では、APIが理解するのが困難になります。
パラメータの違いにより、メソッドごとに異なるシグネチャがあります。 Javaコンパイラは、どのメソッドが呼び出されるかを認識しています。
世界のトップ大学からオンラインでソフトウェアコースを学びましょう。 エグゼクティブPGプログラム、高度な証明書プログラム、または修士プログラムを取得して、キャリアを早急に進めましょう。
静的ポリモーフィズムの例
Javaが静的ポリモーフィズムをサポートする方法の1つは、メソッドのオーバーロードです。 静的ポリモーフィズムにおけるメソッドのオーバーロードのケースを示す例を以下に示します。
例:
クラスSimpleCalculator
{{
int add(int a、int b)
{{
a+bを返します。
}
int add(int a、int b、int c)
{{
a + b+cを返します。
}
}
パブリッククラスのデモ
{{
public static void main(String args [])
{{
SimpleCalculator obj = new SimpleCalculator();
System.out.println(obj.add(25、25));
System.out.println(obj.add(25、25、30));
}
}
プログラムの出力
50
80
2.動的ポリモーフィズム(またはJavaの実行時ポリモーフィズム)
この形式のJavaのポリモーフィズムでは、コンパイラは実行するメソッドを決定しません。 実行時にプロセスを実行するのはJava仮想マシン(JVM)です。 動的ポリモーフィズムとは、オーバーライドされたプロセスへの呼び出しが実行時に解決されるプロセスを指します。 スーパークラスの参照変数は、オーバーライドされたメソッドを呼び出します。 サブクラスとスーパークラスの両方によって実装されるメソッドは、同じ名前を共有しながら異なる機能を提供します。
ランタイムポリモーフィズムの概念を理解する前に、アップキャスティングのプロセスを理解することが重要です。 アップキャストとは、子クラスのオブジェクトがスーパークラスの参照変数によって参照されるプロセスを指します。 PHPのポリモーフィズムについて学びます。
動的ポリモーフィズム(または実行時)の例
例1:
BikeとSplendorの2つのクラスが作成され、Splendorのクラスは、run()メソッドをオーバーライドするBikeのクラスを拡張します。 run()メソッドは、親クラスの参照変数によって呼び出されます。 サブクラスメソッドは親クラスメソッドをオーバーライドしているため、 サブクラスメソッドは実行時に呼び出されます。
プログラム
クラスバイク{
void run(){System.out.println( "running");}
}
クラスSplendorはBikeを拡張します{
void run(){System.out.println( "30kmで安全に歩く");}
公衆 静的 void main(String args []){
バイクb= new Splendor();//アップキャスト
b.run();
}
}
出力: 60kmで安全に歩く
例2
「ABC」と「XYZ」という名前の2つのクラスが作成されます。ここで、XYZは子クラスで、ABCは親クラスです。 ここで、親クラスのメソッドmyMethod()は、子クラスによってオーバーライドされます。 子クラスオブジェクトは、親クラス参照に割り当てられます。
プログラム:
クラスABC{
public void myMethod(){
System.out.println( "オーバーライドされたメソッド");
}
}
パブリッククラスXYZはABCを拡張します{
public void myMethod(){
System.out.println( "オーバーライドメソッド");
}
public static void main(String args []){
ABC obj = new XYZ();
obj.myMethod();
}
}
出力
オーバーライド方法
結論
Javaのポリモーフィズムの概念は、オブジェクト指向プログラミングで最も役立つ機能の1つです。 さらに、静的および実行時の両方でメソッドを呼び出す機能により、その適用範囲が広がります。
ポリモーフィズムの概念をもたらす背後にある考え方は柔軟性です。 さらに、単一の参照変数で多数のオブジェクトを処理する機能により、コーディングが少し簡単になります。 したがって、この概念は日常のコーディングタスクで使用され、その有効性を受け入れる必要があります。
ソフトウェアテクノロジー、その開発、およびその背後にあるメカニズムについて詳しく知りたい場合は、upGradが提供するソフトウェア開発のエグゼクティブPGプログラム–フルスタック開発の専門分野のコースを確認できます。 専門コースは23週間のオンラインプログラムで、300以上のケーススタディを提供して知識を高め、利用可能なツールとプログラミング言語を使用して実践的なスキルを向上させます。 コースに関連する質問が他にある場合は、メッセージをお送りください。 私たちのチームがあなたに連絡します。