0

メソッドのオーバーライドについて質問があります。OK、ここに OOP があります。得られる結果は理解できます。しかし.. jdkはどのように解決し、それぞれの場合にどの実装を使用するのですか?

public class One {
    One() {
        run();
    }

    public void run() {
        System.out.println("One");
    }
}

public class Two extends One {
    @Override
    public void run() {
        System.out.println("Two");
    }
}

public class Test {
    public static void main(String[] args) {
       One test = new Two();
    }
}

急いでいたので、あまり良いコード リストでなくて本当に申し訳ありません。変更が追加されました。

4

2 に答える 2

2

まず第一に、クラスが宣言されている方法が間違っており、静的メソッドはオブジェクトにバインドされていないため、静的メソッドはオーバーライドに参加しません。

于 2013-05-17T17:05:56.480 に答える
0

Java は、Two の vtable で関数を検索します。見つからない場合は、vtable で One を探します。この場合、それが見つかった (そして @Override で直接示されている) ため、それが使用されます。

https://stackoverflow.com/a/1543311/431415

基本的に、一致する関数を探して、最も具体的なものから最も具体的でないものへと移動します。

于 2013-05-17T16:44:55.383 に答える