【问题标题】:Does method overloading implicitly typecasts to larger type even though compatible type is available [duplicate]即使兼容类型可用,方法重载是否隐式类型转换为更大的类型[重复]
【发布时间】:2019-07-17 15:41:35
【问题描述】:

当我执行下面的程序时,由于子类具有兼容的方法,调用应该转到子类,而是调用父类方法。是否有任何重载规则导致这种行为?

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);
    } 
}

【问题讨论】:

    标签: java methods overriding


    【解决方案1】:

    要调用的方法是在编译时选择的。编译器只考虑变量类型上存在的方法,即Parent,因为它只知道dParent

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

    编译器会自动将int 参数加倍以使其与方法的形参类型兼容。

    d 在运行时更具体地是 Child 这一事实未被使用。

    【讨论】:

    • 感谢您的解释。真的很有帮助。假设如果我们将父类和子类方法都保留在单个类中,那么它将调用 int 类型的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    • 2012-02-26
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多