English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

javaの多態性の詳細解説と簡単な例

Javaにおける多態性の実現

多態性とは何か

  1. オブジェクト指向の三つの特性:封装、継承、多態性。ある視点から見ると、封装や継承はほぼ多態性のために準備されています。これは最後の概念であり、最も重要な知識点です。
  2. 多態性の定義:異なるクラスのオブジェクトが同一のメッセージに応答することを許可することです。つまり、同一のメッセージは送信オブジェクトによって異なる行動を取ることができます。(メッセージの送信は関数呼び出しです)
  3. 多態性を実現する技術は、動的バインディング(ダイナミックバインディング)と呼ばれ、実行中に参照しているオブジェクトの実際のタイプを判定し、実際のタイプに応じてその相应のメソッドを呼び出すことを意味します。
  4. 多態性の役割:タイプ間の依存関係を除去します。
  5. の現実では、多態性に関する例は数多く存在します。例えば、F1 のアクションが、現在Flashのインターフェースで弹出されている場合はAS 3 のヘルプドキュメント;現在Wordで弹出的是Wordのヘルプ;Windowsで弹出的是Windowsのヘルプとサポート。同じイベントが異なるオブジェクト上で発生すると、異なる結果が生じます。

以下は、多態性が存在する三つの必要条件です。皆さんは夢の中でも覚えられるように要求します!

多態性が存在する三つの必要条件

一、継承が必要;
二、オーバーライドが必要;
三、親クラスの参照が子クラスのオブジェクトを指す。

 多態性の利点:

1.可換性(サブスタイティビリティ)。多態性は既存のコードに対して可換性を持っています。例えば、多態性は円Circleクラスで働くだけでなく、環や他の任何の円形幾何体に対しても同様に働きます。

2.拡張性(エキスティンシビリティ)。多態性はコードに対して拡張性を持っています。新しいサブクラスの追加は、既存のクラスの多態性、継承性、その他の特性の動作や操作に影響を与えません。実際、新しいサブクラスは多態性機能をより簡単に取得できます。例えば、圆锥、半円錐、半球体の多態性を既に実現している場合、球体クラスの多態性を簡単に追加できます。

3.インターフェース性(インターフェース-ability)。多態性は、超クラスがメソッドシグネチャを通じて、サブクラスに共通のインターフェースを提供し、サブクラスがそれを拡張またはオーバーライドすることで実現されます。図では、8.3 図に示されます。図の超クラスShapeは、多態性を実現するための二つのインターフェースメソッドcomputeArea()およびcomputeVolume()を定義しています。サブクラス、例えばCircleやSphereは、多態性を実現するために、これらのインターフェースメソッドを拡張またはオーバーライドします。

4.柔軟性(フレキシビリティ)。それは、アプリケーションで多様な操作を示し、使用効率を向上させます。

5.簡便性(シンプルネス)。多態性の簡便性は、アプリケーションソフトウェアのコードの書き方や修正プロセスを簡便にし、特に大量のオブジェクトの演算や操作を行う場合、この特性が特に目立つ重要です。

Javaでの多態性の実現方法:インターフェース実装、親クラスを継承してメソッドのオーバーライド、同じクラス内でメソッドのオーバーロードを行います。

一つの小さなテーマ:

(一)関連クラス

class A ...{ 
     public String show(D obj)...{ 
        return ("A and D"); 
     }  
     public String show(A obj)...{ 
        return ("A and A"); 
     }  
}  
class B extends A...{ 
     public String show(B obj)...{ 
        return ("B and B"); 
     } 
     public String show(A obj)...{ 
        return ("B and A"); 
     }  
} 
class C extends B...{}  
class D extends B...{} 

(二)問題:以下の結果は何ですか?

A a1 = new A(); 
    A a2 = new B(); 
    B b = new B(); 
    C c = new C();  
    D d = new D();  
    System.out.println(a1.show(b));  ① 
    System.out.println(a1.show(c));  ② 
    System.out.println(a1.show(d));  ③ 
    System.out.println(a2.show(b));  ④ 
    System.out.println(a2.show(c));  ⑤ 
    System.out.println(a2.show(d));  ⑥ 
    System.out.println(b.show(b));  ⑦ 
    System.out.println(b.show(c));  ⑧ 
    System.out.println(b.show(d));  ⑨   

(三)解答

①  A and A
②  A and A
③  A and D
④  B and A
⑤  B and A
⑥  A and D
⑦  B and B
⑧  B and B
⑨  A and D

ご読覧ありがとうございます。皆様のサポートに感謝します!

おすすめ