4

この Java のビットが 3 ではなく 2 を生成する理由を知りたいと思っていました。

public class Test {
    private static class A {
        int f(A a) {
            return 1;
        }
    }
    private static class B extends A {
        int f(A a) {
            return 2;
        }
        int f(B b) {
            return 3;
        }
    }

    public static void main(String[] astrArgs) {
        A ab = new B();
        B b = new B();

        System.out.println( ab.f(b) );  
    }
}

テストの質問でこれに出くわしましたが、その背後にあるロジックを理解できませんでした。

4

2 に答える 2

0

この場合、ab は A 型ですが、B としてインスタンス化されます。A はメソッドのみを認識します。

int f(A a) {
  return 1;
}

b は A 型なので有効です。B は int f(A a) をオーバーライドするため、このメソッドが使用されます。

int f(A a) {
    return 2;
}

それが役立つことを願っています。

于 2013-05-01T20:43:12.747 に答える