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