親コンストラクタの多態を後で深く追跡するために記録する.

1361 ワード

次のコード:

public class Qdb extends Depend
{
    int i = 30;
    public Qdb()
    {
        print();
        super.print();
        i = 40;
    }

    void print()
    {
        System.out.println("Target=> " + i);
    }


    public static void main(String[] args)
    {
        new Qdb();
    }
}

class Depend
{
    int i = 10;
    public Depend()
    {
        print();
        i = 20;
    }

    void print()
    {
        System.out.println("Depend=> " + i);
    }
}

私の予想結果:
Depend=> 10
Target=>30
Depend=>20
最終的な結果は次のとおりです.
Target=> 0
Target=> 30
Depend=> 20
Javaに関する知識は次のとおりです.
1、方法のカバー.
2,属性がクラス全体の初期化時の付与タイミング.
3,子クラスの初期化時に親クラスの構築方法を先に実行する.
4,子クラスに親クラスの同名の属性がある場合、どのように処理しますか?
得られるのは、子クラスが初期化時に親クラスの構造方法を先に実行することであるが、親クラスの構造方法で上書きの疑いのある方法を呼び出す場合(すなわち、本例のprint方法)は、子クラスの方法を呼び出す.
....
後で多く考えてみると、「Target=>0」が現れるのは普通だと思います:結局今は1つのサブクラスのインスタンスを初期化しなければならないので、JVMは背後で先に親クラスの構造方法を呼び出しなければなりませんが、これは子クラスのために前期の準備をして、この構造方法の中で呼び出す方法も子クラス自身の--つまり子クラスのprint方法であるべきです.
しかし、これは演義型の解釈であり、公式の正式な解釈はない.これからの正式な研究のために前期の感性の蓄積をする.