Javaでの多態性のタイプ-実行時とコンパイル時の多態性

最後のチュートリアルでは、Javaでの多態性について説明しました。 このガイドでは、多態性のタイプを見ていきます。 Javaには2種類の多型があります:
1)コンパイル時多型とも呼ばれる静的多型
2)実行時多型とも呼ばれる動的多型

コンパイル時多型(または静的多型)

コンパイラ時に解決される多型は静的多型として知られています。 メソッドのオーバーロードは、コンパイル時の多態性の例です。
メソッドのオーバーロード:メソッドのパラメータがパラメータの数、シーケンス、データ型が異なる場合、同じ名前のメソッドを複数持つことができます。 このガイドを読んでいない場合は、以下を参照してください。JavaでのMethod Overloading

static Polymorphismの例

Method overloadingは、javaがstatic polymorphismをサポートする方法の一つです。 ここでは、addメソッドが呼び出される同じメソッドadd()の二つの定義がコンパイル時にパラメータリストによって決定されます。 これがコンパイル時の多態性としても知られている理由です。

class SimpleCalculator{ int add(int a, int b) { return a+b; } int add(int a, int b, int c) { return a+b+c; }}public class Demo{ public static void main(String args) { SimpleCalculator obj = new SimpleCalculator(); System.out.println(obj.add(10, 20)); System.out.println(obj.add(10, 20, 30)); }}

:

3060

実行時ポリモーフィズム(または動的ポリモーフィズム)

これは、動的メソッドディスパッチとも呼ばれます。 動的多態性は、オーバーライドされたメソッドへの呼び出しが実行時に解決されるプロセスであり、それが実行時多態性と呼ばれる理由です。 私はすでに別のチュートリアルでメソッドのオーバーライドについて詳しく説明しました。


この例では、ABCとXYZの二つのクラスがあります。 ABCは親クラスで、XYZは子クラスです。 子クラスは、親クラスのメソッドmyMethod()をオーバーライドしています。 この例では、親クラス参照に子クラスオブジェクトが割り当てられているため、どのメソッドが呼び出されるかを判断するために、オブジェクトの型 これは、メソッドのどのバージョンが呼び出されるかを決定するオブジェクトのタイプです(参照のタイプではありません)。

オーバーライドの概念を理解するには、Javaでの継承の基本的な知識が必要です。

class ABC{ public void myMethod(){System.out.println("Overridden Method"); }}public class XYZ extends ABC{ public void myMethod(){System.out.println("Overriding Method"); } public static void main(String args){ABC obj = new XYZ();obj.myMethod(); }}

出力:

Overriding Method

オーバーライドされたメソッドが親クラスの参照を介して呼び出されると、オブジェクトの型によって実行されるメソッドが決定されます。 したがって、この決定は実行時に行われます。
クラス、子クラスと親クラスの両方が同じメソッドanimalSoundを持っているので。 どのバージョンのメソッド(子クラスまたは親クラス)が呼び出されるかは、実行時にJVMによって決定されます。

いくつかのより多くのオーバーライドの例:

ABC obj = new ABC();obj.myMethod();// This would call the myMethod() of parent class ABCXYZ obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZABC obj = new XYZ();obj.myMethod();// This would call the myMethod() of child class XYZ

第三のケースでは、実行されるメソッドがオブジェクトのタイプによって決定され、オブジェクトが子クラスに属しているため、子クラスバージョンのmyMethod()が呼び出されるため、子クラスのメソッドが実行されます。

コメントを残す

メールアドレスが公開されることはありません。

More: