0
class Overload{

  public static void main(String args[]) {
    int[]  number={1,2,3,4,5,6,7,8,9,10};   
    int [] num={1,2,3,4,5};
    int i;
    int sum=0;
    sum = f(number);   
    int sum1= f(num);
    System.out.println("The sum is" +sum + ".");
    System.out.println("The sum is" +sum1 + ".");
  }

  public static int f(int[] value) {
    int i, total = 0;
    for(i=0; i<10; i++) {
      total = total + value[ i ];
    }
    return (total);
  }

  public static int f(int... x) {
    int i, total = 0;
    for(i=0; i<10; i++) {
      total = total + x[ i ];
    }
    return (total);
  }

}

在编译上述程序时,我收到错误消息

C:\Program Files\Java\jdk1.7.0_09\bin>javac Overload.java
Overload.java:30:错误:不能在 Overload 中同时声明 f(int...) 和 f(int[])
公共静态int f(int ... x)
4

4 回答 4

4
public static int f(int... x)

只不过是:-

public static int f(int[] x)

唯一的区别是它不一定需要传递参数。当您传递单个元素时,它们会在内部转换为数组。所以,你实际上array只是通过了一个。

而后者需要一个论点。至少是一个空数组。

如果您将数组作为参数传递,那么这两种方法都有资格被调用。

所以调用:

f(new int[] {1, 2});

可以对这两种方法进行。因此,存在歧义。


但是,f(5)只能对第一种方法进行调用。因为,5不能分配给数组类型。因此,只有在传递数组时才会出现歧义。

于 2012-11-20T17:14:28.517 回答
1

您的编译器认为将变量参数作为参数的方法可能与将数组作为参数的方法相同。即,它认为存在具有相同数量参数的重复方法,这违反了重载规则。

public void m1(int[] arr){

}

public void m1(int...i){

}

基本相同。唯一的区别是var-args可以接受任意数量的 int 变量

于 2012-11-20T17:14:18.437 回答
0

方法签名是相同的。因此过载是不可能的。更改方法签名。

wikipedia中有一个 Java 中方法签名的定义。

在 Java 编程语言中,方法签名是方法名称及其参数的数量和类型。返回类型和抛出的异常不被视为方法签名的一部分。

在您的代码中,您有两个具有相同签名的方法f(int[] value)。另一个函数int...用作参数,但它等效于int[].

于 2012-11-20T17:21:48.797 回答
0

方法重载是java的一项功能,它允许您使用多个具有相同名称但参数列表不同的方法

方法重载也称为静态多态

Argument list must be differ 
 1) Numbers of Parameters "not the same parameters"
 2) Data type of parameters "does not have the same datatype of parameters" 
 3) Sequence of Datatype of parameters "its may be possible to change the sequence the of datatype."

方法重载具有相同的参数,那么它必须是返回类型不同假设

 public class Test
 {

   public int printVal(int i,int j)
   {
     System.out.println("Integer Return type")
      return i*j;
   }

   public double printVal(int i,int j)
   {
     System.out.println("Double Return type")
      return i*j;
   }

 }

在上面的类中,我们有两个方法,一个具有 int 返回类型,另一个具有 double 返回类型,因此可以在方法重载中使用。

它意味着数据类型的序列

public class Test
{
  public void display(String surname ,String name)
  {
     System.out.println("Surname = "+surname);
     System.out.println("Name    = "+name);

  }

  public void display(String name,String surname)
  {

     System.out.println("Name    = "+name);
     System.out.println("Surname = "+surname);

  }
}

在上面的示例中,我们有两个方法作为相同的数据类型,但其顺序不同,这种情况也称为方法重载..

于 2015-01-16T18:45:22.227 回答