この記事では、Java のランタイム ポリモーフィズムについて学びます。 「ポリ」は「たくさんの」、「モーフ」は「型」を意味します。したがって、ポリモーフィズムという用語は、異なる型の同じものを指します。ここでは、Java が実行時、つまりコンパイル後、コードの実行前にどのようにポリモーフィズムをアーカイブするかを見ていきます。
構文:
広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テストJava の実行時ポリモーフィズムの場合、注釈を付けた Java の基本構文に従う必要があります。
@Override
ここで注釈を使用して、どのメソッドを具体的にオーバーライドするかを指定できます。
Java では、メソッドのオーバーライドによって実行時ポリモーフィズムが機能します。メソッドのオーバーライドは、オブジェクトのメソッド名、引数、型が親クラスと同じであるが、機能が異なる場合に発生します。子クラスにそのタイプのメソッドが含まれている場合、それをオーバーライドされたメソッドと呼びます。
親の型参照を通じて子クラスのオーバーライドされたメソッドを呼び出すとき (Java ではこの現象を「アップキャスト」と呼びます)、オブジェクトの型はどのメソッドまたは機能が呼び出されるかを示します。この決定は、コードのコンパイル後の JVM による実行時に行われます。したがって、これは実行時ポリモーフィズムと呼ばれます。
「動的メソッドディスパッチ」とも呼ばれます。このように名付けられた理由は、メソッドの機能が実行時に JVM
によってオブジェクトごとに動的に決定されるためです。メソッドとオブジェクトのバインディング、つまり、どのオブジェクトのメソッドの機能が表示されるかは、遅く、つまりコンパイル後に決定されるため、「遅延バインディング」とも呼ばれます。
以下は、実行時ポリモーフィズムのルールと制限の一部です。
ここでは、実行時ポリモーフィズムのコード例をいくつか説明します。
この例では、メソッド Showcase() が、関連付けられているオブジェクトのタイプに応じて、どのように異なるメッセージを表示するかを示します。 「Parents」タイプに関連付けられている場合、親クラスからのメッセージが表示されます。 「Children」タイプに関連付けられている場合、子クラスからのメッセージが表示されます。
コード:
class Parents { public void showcase () { System.out.println("I am Parent"); } } class Children extends Parents { @Override public void showcase () { System.out.println("I am Children"); } } public class RunTimePolymorphism { public static void main(String args[]) { Parents superObject = new Parents(); superObject.showcase(); //method of super class or parent class is called Parents subObject = new Children(); // upcasting subObject.showcase();//method of sub class or child class is called by Parent reference, this is called "Run time Polymorphism" Children subObject2 = new Children(); subObject2.showcase(); //method of sub class or child class is called } }
出力:
マルチレベル継承の場合の実行時ポリモーフィズムの例を見てみましょう。この例では、2 つのレベルの継承を考慮しています。この例では、関連付けられているオブジェクトのタイプに応じて、メソッド sip() がどのように異なるメッセージを表示するかを示します。 「Human」タイプに関連付けられている場合、親クラスからのメッセージが表示されます。 「Man」タイプに関連付けられている場合、その子クラスからのメッセージが表示されます。再び、継承の 2 番目のレベルで、「Baby」タイプに関連付けられている場合、その親である「Man」クラスの子クラスからのメッセージが表示されます。
コード:
class Human{ void sip() { System.out.println("Human is sipping"); } } class Man extends Human{ void sip(){ System.out.println("Man is sipping soup"); } } class Baby extends Man{ void sip(){ System.out.println("Baby is sipping milk"); } } public class RunTimePolymorphism { public static void main(String args[]){ Human superObject=new Human(); Human subObject=new Man(); // // upcasting : first level of heritance Human babyObject=new Baby(); // // upcasting : second level of heritance superObject.sip(); subObject.sip(); //run time polymorphism happening in first level of heritance babyObject.sip(); //run time polymorphism happening in second level of heritance } }
出力:
マルチレベル継承の場合の実行時ポリモーフィズムの別の例を見てみましょう。この例では、3 つのレベルの継承が考慮されています。この例では、メソッド feature () が、関連付けられているオブジェクトのタイプに応じて異なる機能をどのように表示するかを示します。 「オペレーティング システム」タイプに関連付けられている場合、親クラスからのメッセージが表示されます。 「DOS」タイプに関連付けられている場合、その子クラスからのメッセージが表示されます。継承の 2 番目のレベルでも、「Windows」タイプに関連付けられている場合、その親である「DOS」クラスの子クラスからのメッセージが表示されます。継承の 3 番目のレベルでも、「WindowsMobile」タイプに関連付けられている場合、その親である「Windows」クラスの子クラスからのメッセージが表示されます。
コード:
class OperatingSytem{ void feature() { System.out.println("This is Operating Sytem"); } } class DOS extends OperatingSytem{ void feature(){ System.out.println("This is DOS"); } } class Windows extends DOS{ void feature(){ System.out.println("This is Windows"); } } class WindowsMobile extends Windows{ void feature(){ System.out.println("This is Windows Mobile"); } } public class RunTimePolymorphism { public static void main(String args[]){ OperatingSytem superObject=new OperatingSytem(); OperatingSytem subObject=new DOS(); // child object type : first level of heritance OperatingSytem sub2Object=new Windows(); // child object type : second level of heritance OperatingSytem sub3Object=new WindowsMobile(); // child object type : third level of heritance superObject.feature(); subObject.feature(); //run time polymorphism happening in first level of heritance sub2Object.feature(); //run time polymorphism happening in second level of heritance sub3Object.feature(); //run time polymorphism happening in third level of heritance } }
Output:
This concludes our learning of the topic “Runtime Polymorphism in Java”. Write yourself the codes mentioned in the above examples in the java compiler and verify the output. Learning of codes will be incomplete if you will not write code by yourself.
以上がJava の実行時ポリモーフィズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。