易百教程

78、以下 Java 程序的输出是什么?

class OverloadingCalculation3 {

    void sum(int a, long b) {
        System.out.println("a method invoked");
    }

    void sum(long a, int b) {
        System.out.println("b method invoked");
    }

    public static void main(String args[]) {
        OverloadingCalculation3 obj = new OverloadingCalculation3();
        obj.sum(20, 20);//now ambiguity    
    }
}

运行输出:

OverloadingCalculation3.java:7: error: reference to sum is ambiguous
obj.sum(20,20);//now ambiguity  
     ^ 
      both method sum(int,long) in OverloadingCalculation3 
      and method sum(long,int) in OverloadingCalculation3 match
1 error

解释:定义了两个具有相同名称的方法,即 sum 。 第一种方法接受 integerlong 类型,而第二种方法接受 longinteger 类型。 传递的参数是 a = 20b = 20。无法确定将调用哪个方法,因为int字面量和long字面量之间没有明确的区别。这就是模棱两可的情况。 因此,编译器会抛出错误。