Java の実行時ポリモーフィズム

王林
リリース: 2024-08-30 15:43:45
オリジナル
583 人が閲覧しました

この記事では、Java のランタイム ポリモーフィズムについて学びます。 「ポリ」は「たくさんの」、「モーフ」は「型」を意味します。したがって、ポリモーフィズムという用語は、異なる型の同じものを指します。ここでは、Java が実行時、つまりコンパイル後、コードの実行前にどのようにポリモーフィズムをアーカイブするかを見ていきます。

構文:

広告 このカテゴリーの人気コース JAVA マスタリー - スペシャライゼーション | 78 コース シリーズ | 15 回の模擬テスト

Java の実行時ポリモーフィズムの場合、注釈を付けた Java の基本構文に従う必要があります。

@Override
ログイン後にコピー

ここで注釈を使用して、どのメソッドを具体的にオーバーライドするかを指定できます。

Java ではランタイムポリモーフィズムはどのように機能しますか?

Java では、メソッドのオーバーライドによって実行時ポリモーフィズムが機能します。メソッドのオーバーライドは、オブジェクトのメソッド名、引数、型が親クラスと同じであるが、機能が異なる場合に発生します。子クラスにそのタイプのメソッドが含まれている場合、それをオーバーライドされたメソッドと呼びます。

なぜランタイムポリモーフィズムと呼ばれるのでしょうか?

親の型参照を通じて子クラスのオーバーライドされたメソッドを呼び出すとき (Java ではこの現象を「アップキャスト」と呼びます)、オブジェクトの型はどのメソッドまたは機能が呼び出されるかを示します。この決定は、コードのコンパイル後の JVM による実行時に行われます。したがって、これは実行時ポリモーフィズムと呼ばれます。

「動的メソッドディスパッチ」とも呼ばれます。このように名付けられた理由は、メソッドの機能が実行時に JVM

によってオブジェクトごとに動的に決定されるためです。

メソッドとオブジェクトのバインディング、つまり、どのオブジェクトのメソッドの機能が表示されるかは、遅く、つまりコンパイル後に決定されるため、「遅延バインディング」とも呼ばれます。

ルール実行時ポリモーフィズム

の制限事項

以下は、実行時ポリモーフィズムのルールと制限の一部です。

ランタイムポリモーフィズムのルール

  • 子クラスと親クラスのメソッドは同じ名前でなければなりません。
  • 子クラスと親クラスのメソッドには同じパラメータが必要です。
  • IS-A 関係は必須です (継承)。

ランタイムポリモーフィズムの制限

  • 親クラスのプライベート メソッドをオーバーライドすることはできません。
  • Final メソッドをオーバーライドすることはできません。
  • 静的メソッドをオーバーライドすることはできません。

Java における実行時ポリモーフィズムの例

ここでは、実行時ポリモーフィズムのコード例をいくつか説明します。

例# 1

この例では、メソッド 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
}
}
ログイン後にコピー

出力:

Java の実行時ポリモーフィズム

例#2

マルチレベル継承の場合の実行時ポリモーフィズムの例を見てみましょう。この例では、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
}
}
ログイン後にコピー

出力:

Java の実行時ポリモーフィズム

例#3

マルチレベル継承の場合の実行時ポリモーフィズムの別の例を見てみましょう。この例では、3 つのレベルの継承が考慮されています。この例では、メソッド feature () が、関連付けられているオブジェクトのタイプに応じて異なる機能をどのように表示するかを示します。 「オペレーティング システム」タイプに関連付けられている場合、親クラスからのメッセージが表示されます。 「DOS」タイプに関連付けられている場合、その子クラスからのメッセージが表示されます。継承の 2 番目のレベルでも、「Windows」タイプに関連付けられている場合、その親である「DOS」クラスの子クラスからのメッセージが表示されます。継承の 3 番目のレベルでも、「WindowsMo​​bile」タイプに関連付けられている場合、その親である「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:

Java の実行時ポリモーフィズム

Conclusion

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート