java - 即使兼容类型可用,方法重载是否隐式类型转换为更大的类型

标签 java methods overriding

当我执行下面的程序时,因为子类具有兼容的方法,调用应该转到子类,而是调用父类方法。是否存在导致此行为的重载规则?

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,因为它只知道 dParent

由于它只知道 test(double)add(double,double,double),因此这些是将被调用的方法。因为它们在子类中没有被重写(只是重载),所以调用父类中的方法。

编译器会自动将 int 参数加宽为 double,以使它们与方法的形式参数类型兼容。

没有使用 d 更具体地说是运行时的 Child 的事实。

关于java - 即使兼容类型可用,方法重载是否隐式类型转换为更大的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57079690/

相关文章:

java - 在方法调用时抛出异常

java - Hibernate 与子项一起重复 INSERT 记录

java - 通过反射获取固定泛型参数的父方法

java - 内置类中的方法

opengl - 打开TK区别onRenderFrame和onUpdateFrame?

java - Android 端口无法工作

java - 在 Tomcat Web 应用程序中重新加载页面时出现 404 错误

Java - 初始化数组后和使用类方法测试数组时出现 NullPointerException

C# - 覆盖 WebBrowserDocumentCompletedEventHandler 的事件参数

swift - 覆盖 Swift 中的属性