我不明白为什么ab.m3()
方法调用父类而不是子类的函数。我以为可能将新的Integer
传递给该方法可能会调用父类的方法,因为Integer
是Object
,因此我尝试了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
。