多形---簡単

3110 ワード

1:役割
        タイプ間の結合関係は解消できます。
2:動的バインディング(すなわち多形)
        運転期間中にオブジェクトの種類を知っています。
        javaでは、staticとfinalのほかに、動的に結合されています。
 3:短所:
         1):親類と子類には同名の方法があるが、親類の方法はprvateであり、子類の対象を親フィールドに付与し、同名の方法を呼び出すのは親類の方法である(prvate方法は再負荷されない)
         2):マルチモードはprvate、ドメイン、静的な方法では発生しません。
4:構造方法と多態
       構造方法は多形性を持たない(構造方法はstatic)
       構造方法の初期化順序(多形後)
             1):基質のコンストラクタ初期化(最下層の基本コンストラクタに戻す)
             2):メンバーフィールドのコンストラクタ(フィールドが正しく初期化されることを確認するために使用します。)
             3):自分のコンストラクタ 
        引き継ぎと整理の順番
             サブクラスのクリーンアップ方法の最後の行は必ず親タイプのクリーンアップ方法を呼び出す必要があります。そうでなければ、親タイプのクリーンアップ方法は永遠に呼び出されません。
           
フィールドについて:廃棄の順序は宣言の順序と逆である。
基質について:廃棄の順番は、先子類後父類
 
問題 
サブコンストラクタを初期化する時、父のコンストラクタを先に呼び出して、父のコンストラクタの中でカバーされる方法を呼び出しました。この時の方法はサブクラスの中の方法です。
 5:協働戻り値の種類
      サブクラスでカバーされている方法は、ベースメソッドの戻り値のサブタイプを返します。 
 
一例:
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{  
  
}  
  
public class Test {  
    public static void main(String[] args) {  
        A a1 = new A();  
        A a2 = new B();  
        B b = new B();  
        C c = new C();  
        D d = new D();  
          
        System.out.println("1--" + a1.show(b));  //A       b   ,     b      ,     
        System.out.println("2--" + a1.show(c));  //A       c   ,     c      ,     
        System.out.println("3--" + a1.show(d));  //A      d   ,     
        //a2   B ,   A  “  ”  (     B      ),B  A   ,     a      
        System.out.println("4--" + a2.show(b));   //B      b   , a    ,      ;      b   (a)   ,            
        System.out.println("5--" + a2.show(c));   //B       c   ,     b   (a)   ,            
        System.out.println("6--" + a2.show(d));   //B       d   ,     ,     
        
        System.out.println("7--" + b.show(b));    //B      b   ,     
        System.out.println("8--" + b.show(c));    //B       c   ,      ,       c      ,     
        System.out.println("9--" + b.show(d));    //B       d   ,     ,     
    }  
}  
 
追加:
したがって、多形構造は、原則として以下のようにまとめられています。超分類の対象が変数のサブクラスオブジェクトを参照する場合、参照対象のタイプではなく、誰のメンバーメソッドを呼び出すかを決定します。しかし、この呼び出し方法は、超クラスで定義されている必要があります。つまり、布団類のカバー方法です。しかしながら、この優先度は、継承チェーンにおいて、this.show(O)、super.show(O)、this.show(super)O、super.show(super)O)であることが確認される。
 
コピー:http://blog.csdn.net/chenssy/article/details/12786385