用Java重载方法

时间:2012-11-20 17:12:46

标签: java methods overloading

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: error: cannot declare both f(int...) and f(int[]) in Overload
public static int f(int... x)

4 个答案:

答案 0 :(得分:4)

public static int f(int... x)

只不过是: -

public static int f(int[] x)

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

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

如果要将数组作为参数传递,则两种方法都有资格被调用。

所以电话:

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

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


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

答案 1 :(得分:1)

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

public void m1(int[] arr){

}

public void m1(int...i){

}

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

答案 2 :(得分:0)

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

来自wikipedia的Java中的方法签名定义。

  

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

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

答案 3 :(得分: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返回类型,另一个具有双返回类型,因此可以在方法重载中使用。

数据类型的序列意味着

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

  }
}

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