如何通过扫描仪类接受字符串数组并按用户大小定义其大小

时间:2017-01-03 17:43:15

标签: java

两个方法是否可以具有相同的名称和相同的参数并返回相同的类型?

例如,我有这两种方法:

class Method
{

   public int mm(int a,int b)
   {
      return a+b;
   }
   public int mm(int a,int b)
   {
      return ab;
   }
   public static void main*String j[])
   {  
       Method m=new Method();
        System.out,println(m.add(12,23);
        System.out.println(m.add(12.0f,23.0f);
   }
}

但是这段代码会产生错误,这意味着返回类型不应该相同

4 个答案:

答案 0 :(得分:0)

  

Overloading方法必须有以下不同之处:

  1. 参数数量。
  2. 参数的数据类型。
  3. 参数的数据类型序列。

答案 1 :(得分:0)

我发现您提供的代码段中存在多个语法错误。没关系,我想当你想在问题中提出代码时语法出错了。

来到您的查询:

您发现自己拥有mm方法的确切方法签名。 mm方法都采用int aint b以及returns int。 因此编译器将不知道调用什么方法,因为这两个方法将在完全相同的条件下调用。换句话说,当没有调用这些方法中的任何一个时,没有简单的场景。 但是,如果更改任一mm方法的参数,则代码将编译:

public int mm(int a, int b) {
    return a + b;
}

public int mm(float a, float b) {
    return 1;
}

public static void main(String j[]) {
    Method m = new Method();
    System.out.println(m.mm(12, 23));
    System.out.println(m.mm(12.0f, 23.0f));
}

在上面的例子中,编译器将在第二个调用语句中调用第二个mm方法,System.out.println(m.mm(12.0f, 23.0f));

因此,您可以看到,您可以使用相同的return类型。

希望它可以帮到你!

答案 2 :(得分:0)

对于此类问题,您应该始终查阅JLS。所以我们走了:

<强> §8.4.9. Overloading

  

如果一个类的两个方法(无论是在同一个类中声明,还是由一个类继承,或者一个是声明的,一个是继承的)都具有相同的名称,但签名不是覆盖等价的,那么方法名称是据说超载了。

接口也是如此:

<强> §9.4.2. Overloading

  

如果接口的两个方法(无论是在同一个接口中声明,还是由接口继承,或者是声明的和继承的)都具有相同的名称,但不同的签名不是覆盖等效的(§8.4.2) ),然后方法名称被称为重载。

这里解释了“覆盖等效”一词:

<强> §8.4.2. Method Signature

  

如果m1是m2的子签名或m2是m1的子签名,则两个方法签名m1和m2是覆盖等价的。

本段还解释了“签名”和“子签名”这一术语,其中签名更为重要:

  

两个方法或构造函数M和N具有相同的签名,如果它们具有相同的名称,相同的类型参数(如果有的话)(第8.4.4节),并且在将形式参数类型N调整为M的类型参数,相同的形式参数类型。

总结一下,这意味着 返回类型不是方法签名的一部分 ,这也意味着不同的返回类型不足以使方法不同(关于超载)。

答案 3 :(得分:0)

不是,两种方法都有相同的签名,你可以使程序意识到自己并破坏世界。尝试这样的事情:

public int mm(int a ,int b, int op)
{
    int result = 0;
    switch (op) {
    case 1:
        result =  a + b;
        break;
    case 2:
         result = a * b;

    case 3: 
          result = a - b;
    default:
        break;
    }

    return result;
}

   public static void main(String [] args)
   {  
       Method m = new Method();
      System.out.println(  m.mm(5,5,1));
   }