即使兼容类型可用,方法重载是否隐式类型转换为更大的类型
Does method overloading implicitly typecasts to larger type even though compatible type is available
当我执行下面的程序时,因为子 class 具有兼容的方法调用,本应转到子 class 而不是调用父 class 方法。是否存在导致此行为的超载规则?
public class OverrideTest {
public static void main(String[] args) {
Parent d=new Child();
d.test(10);
d.add(1,2,3);
}
}
class Parent{
void test(double d) {
System.out.println("Value of D:"+ d);
}
public void add(double a, double b, double c){
double sum = a+b+c;
System.out.println("sum Double:"+ sum);
}
}
class Child extends Parent{
void test(int i) {
System.out.println("i:"+ i);
}
public void add(int a, int b, int c){
int sum = a+b+c;
System.out.println("sum Int:"+ sum);
}
}
在编译时选择要调用的方法。编译器只考虑存在于变量类型上的方法,即 Parent
,因为它只知道 d
是一个 Parent
.
因为它只知道 test(double)
和 add(double,double,double)
,所以这些是将要调用的方法。因为它们在子 class 中没有被覆盖(仅重载),所以调用父 class 中的方法。
编译器自动将 int
参数扩展为双倍参数,使它们与方法的形式参数类型兼容。
d
在运行时更具体地说是 Child
这一事实未被使用。
当我执行下面的程序时,因为子 class 具有兼容的方法调用,本应转到子 class 而不是调用父 class 方法。是否存在导致此行为的超载规则?
public class OverrideTest {
public static void main(String[] args) {
Parent d=new Child();
d.test(10);
d.add(1,2,3);
}
}
class Parent{
void test(double d) {
System.out.println("Value of D:"+ d);
}
public void add(double a, double b, double c){
double sum = a+b+c;
System.out.println("sum Double:"+ sum);
}
}
class Child extends Parent{
void test(int i) {
System.out.println("i:"+ i);
}
public void add(int a, int b, int c){
int sum = a+b+c;
System.out.println("sum Int:"+ sum);
}
}
在编译时选择要调用的方法。编译器只考虑存在于变量类型上的方法,即 Parent
,因为它只知道 d
是一个 Parent
.
因为它只知道 test(double)
和 add(double,double,double)
,所以这些是将要调用的方法。因为它们在子 class 中没有被覆盖(仅重载),所以调用父 class 中的方法。
编译器自动将 int
参数扩展为双倍参数,使它们与方法的形式参数类型兼容。
d
在运行时更具体地说是 Child
这一事实未被使用。