重载方法的选择
当有多个重名函数,在决定要调用哪个方法的过程中,首先按照参数类型进行匹配,即寻找所有重载方法中最匹配的,然后再看变量的动态类型,进行动态绑定
实验代码
Base1类
public class Base1 {
public int multi(int a, int b) {
System.out.println("base int int");
return a - b;
}
}
Child1类
public class Child1 extends Base1 {
public long multi(long a, long b) {
System.out.println("child long long");
return a * b;
}
}
测试主程序1
public class T {
public static void main(String[] args) {
test2();
}
public static void test2(){
Child1 c = new Child1();
int a = 1;
int b = 2;
long r = c.multi(a,b);
System.out.println(r);
}
}
实验结果1
base int int
-1
测试主程序2
public class T {
public static void main(String[] args) {
test3();
}
public static void test3(){
Child1 c = new Child1();
long a = 1;
int b = 2;
long r = c.multi(a,b);
System.out.println(r);
}
}
实验结果2
child long long
2
结论分析
由实验1可知,当父子类中含有同名重载方法,调用字类实例方法时,先看父子类中该重名方法和调用方法,哪一个方法参数类型更为接近,就调用哪一个。
由实验2可知,当父子类中含有同名重载方法,调用字类实例方法时,父子类方法和调用的方法匹配程度一样时,就走动态绑定的规则。
558

被折叠的 条评论
为什么被折叠?



