009 Javaナレッジポイントのまとめ--継承とマルチステート


1.継承は分かりやすいが、同じ属性や行為が複数ある場合、これらの内容を1つの個別のクラスに抽出すると継承関係に簡略化できる1)式:classサブクラス名extends親クラス名{}2)利点:a.コードの多重性が向上し、b.コードのメンテナンス性が向上し、c.クラスとクラスを関係させることが多態の前提である.3)Javaは単一継承のみをサポートし,多重継承はサポートしないが多層継承は可能である.4)サブクラスはすべての親の非プライベートメンバーのみを継承し、親の構築方法は継承できませんが、superキーで親の構築方法にアクセスできます.5)継承中のメンバー変数の関係:子クラスのメンバー変数が親クラスのメンバー変数名と同じである場合、子クラスメソッドで1つの変数にアクセスする検索順序:a:子クラスメソッドのローカル範囲で検索し、b:子クラスのメンバー範囲で検索し、c:親クラスのメンバー範囲で検索し、ある場合は(親ローカル範囲にアクセスできないに違いない)d:まだ見つからない場合は、エラーを報告します.2.thisとsuperの違いは?thisは、このクラスに対応する参照を表します.superは親ストレージスペースの識別を表します(親参照と理解でき、親メンバーを操作できます).
使用上1)メンバー変数の呼び出し
            this.              
            super.              

2)構造方法の呼び出し
            this(...)            
            super(...)           

3)メンバーメソッドの呼び出し
            this.              
            super.              

注意:super(...)またはthis(...)最初の文に表示する必要があります.そうしないと、親データの複数回の初期化が行われます.
3.継承中の構築メソッドの関係子クラス内のすべての構築メソッドは、親クラスの中空パラメータの構築メソッドにデフォルトでアクセスします.
                     ,           。
          ,       ,              。
          :                   :super();

4.実行フロー、判断結果
class Fu {
    static {
        System.out.println("     Fu");
    }

    {
        System.out.println("     Fu");
    }

    public Fu() {
        System.out.println("    Fu");
    }
}

class Zi extends Fu {
    static {
        System.out.println("     Zi");
    }

    {
        System.out.println("     Zi");
    }

    public Zi() {
        System.out.println("    Zi");
    }
}

class ExtendsTest2 {
    public static void main(String[] args) {
        Zi z = new Zi();
    }
}

実行結果は次のとおりです.
            Fu  
            Zi
            Fu
           Fu
            Zi
           Zi

1)クラスの静的コードブロック,構築コードブロック,構築方法の実行フロー静的コードブロック>構築コードブロック>構築方法2)静的コンテンツはクラスのロードに伴って静的コードブロックをロードするコンテンツが優先的に実行される3)サブクラス初期化の前に親クラスの初期化が行われる.
5.メソッド書き換えサブクラスには、親クラスと同じメソッド宣言が表示され、メソッド上書き、メソッド複写とも呼ばれます.
6.メソッド書き換えの注意事項1)親クラスのプライベートメソッドを書き換えることができない2)子クラスが親メソッドを書き換える場合、アクセス権限を下げることができない3)親クラスの静的メソッド、子クラスも静的メソッドで書き換える必要がある.(実はこれは書き方ではありませんが、現象は確かにそうです.なぜ書き方ではないのか、多態で説明します)
7.メソッドのリロードで戻り値のタイプを変更できますか?メソッドのリロードは、戻り値タイプとは無関係であるため、戻り値タイプを変更できます.Override:メソッド書き換えOverload:メソッドリロード
8.finalキーワードは最終的な意味で、クラス、メンバー変数、メンバーメソッドを修飾することができます.特徴:1)finalはクラスを修飾することができ,このクラスは継承できない.2)finalはメソッドを修飾することができ,このメソッドは書き換えられない.(上書き,複写)3)finalは変数を修飾することができ,この変数は再付与できない.この変数は実は定数だからです.カスタム定数final int x=10;
9.final修飾局所変数1)メソッド内部で、この変数は変更できない2)メソッド宣言上:基本タイプは、値が参照タイプを変更できないことであり、アドレス値が変更できないことである.多態ある物事が、異なる時点で表現される異なる状態.マルチステート前提と体現1)継承関係がある2)書き換え方法がある3)親参照が子オブジェクトを指す
11.マルチステートのメンバーアクセスの特徴:1)メンバー変数のコンパイルは左を見て、実行は左を見てください.2)コンストラクションメソッドサブクラスオブジェクトを作成する場合,親のコンストラクションメソッドにアクセスし,親のデータを初期化する.3)メンバーメソッドコンパイルは左を見,実行は右を見る.メンバーメソッドに書き換えメソッドがあるため、右側を見て実行します.4)静的メソッドコンパイルは左を見,実行は左を見る.(静的にクラスに関連する、書き換えとは言えないので、アクセスは左側の)12.マルチステートの利点1)プログラムのメンテナンス性の向上(継承保証)2)プログラムの拡張性の向上(マルチステート保証)
13.多態の弊害:サブクラス特有の機能を使用できない.したがって,サブクラス特有の機能を参照するために,親クラスの参照を強制的にサブクラスの参照オブジェクト間の遷移問題に変換する:上向き遷移:Fuf=new Zi()ダウンシフト:Zi z=(Zi)f;//このfはZiに変換可能であることが要求される.
14.自分がコードを暗記したときに発生したエラー
/*
        :    
*/
class Animal
{
    public void eat(){
        System.out.println("  ");
    }
}
class Cat extends Animal
{
    public void eat(){
        System.out.println("  )))><);
    }
    public void playGame(){
        System.out.println("   ,   ");
    }
}

class Dog extends Animal
{
    public void eat(){
        System.out.println("   @==@");
    }
    public void lookDoor(){
        System.out.println("    ,  ~~");
    }
}

class PolymorphismTest  //  polymorphism:   
{
    public static void main(String[] args){  /*            ,          ,          */

        Animal a = new Cat();
        a.eat();
        Cat b = (Cat)a;
        b.eat();
        b.playGame();  /*a.playGame();//   :  a    Animal*/
        System.out.println("---------------");

        a = new Dog();
        a.eat();
        Dog c = (Dog)a;
        c.eat();
        c.lookDoor();
    }
}