我不明白为什么ab.m3()方法调用父类而不是子类的函数。我以为可能将新的Integer传递给该方法可能会调用父类的方法,因为IntegerObject,因此我尝试了int,但仍然得到了相同的结果!

public class A {

    public void m1(){
        System.out.println("A.m1");
    }
    public void m2(){
        System.out.println("A.m2");
    }
    public void m3(Object x){
        System.out.println("A.m3");
    }
}

public class B extends A{

    public void m1(){
        System.out.println("B.m1");
    }
    public void m2(int x){
        System.out.println("B.m2");
    }
    public void m3(int x){
        System.out.println("B.m3");
    }

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

        int num = 2;

        ab.m1();
        ab.m2();
        ab.m3(new Integer(2));
        ab.m3(num);

    }
}

输出:
B.m1
A.m2
A.m3
A.m3

最佳答案

B.m3不覆盖A.m3,因为参数列表不兼容。

因为A中唯一的匹配方法是A.m3,并且因为B中没有覆盖,所以将调用A.m3

10-08 13:20