2

トピックバインディングについてかなり混乱しています。静的バインディングでわかっているように、参照しているオブジェクトではなく、バインディングを決定するために参照のタイプがチェックされます。動的バインディングでは、参照が指しているオブジェクトのタイプが考慮されます。

class A
{
    void show()
    {
        System.out.println("From A");
    }
}
class B extends A
{
    void show()
    {
        System.out.println("From B");
    }
}
class Main
{
    public static void main(String[] quora)
    {
        A a1 = new A();
        A a2 = new B();

        a1.show(); //line 1
        a2.show(); //line 2
    }
}

上記の例では、コンパイル時に、Line1 と Line2 の両方が静的バインディングによって処理され、A クラス メソッド show( 参照の型が A であるため) にリンクされることがわかります。しかし、実行時に呼び出しが解決され、line1 が A クラスのメソッド show() にリンクされ、line2 が B クラスのメソッド、つまりオブジェクトのタイプにリンクされます。つまり、動的バインディングと言えます。

したがって、私の主な目的は、次のことを知ることです。

  1. 動的バインディングは常に静的バインディングの後に行われますか? または私は何か間違ったことを理解していますか?

  2. それが本当なら、すべてのメソッドが実行時に動的にリンクされるというのは本当ですか?

  3. それを一般化できますか?

4

1 に答える 1