方法重载具有不同的签名和返回类型

时间:2015-04-04 18:19:02

标签: java oop overloading

方法重载是可能的仅当重载方法具有不同的签名时。 如果签名相同且只有返回类型不同,则无法实现。

来自Java Docs的引用:

  

编译器在区分方法时不考虑返回类型,因此即使它们具有不同的返回类型,也不能声明具有相同签名的两个方法。

但是,同时重载具有不同签名和不同返回类型的方法有什么问题?为什么会出错?

2 个答案:

答案 0 :(得分:3)

根据JLS 8.4.9

,这应该没问题
  

...两个方法的返回类型之间或throws子句之间没有必需的关系,除非它们的签名是覆盖等价的。

例如,这编译并运行良好:

public class Test {
   void move(int x, int y) {
      System.out.println("inside void move(int x, int y)");
   }

   int move(double x, double y) {
      System.out.println("inside int move(double x, double y)");
      return 0;
   }

   public static void main(String[] args) {
      Test test = new Test();
      test.move(0, 0);
      test.move(0.0, 0.0);
   }
}

关于您发布的代码,您的错误是 - 您没有返回任何内容!您的int a(...)方法被声明为返回一个int而您什么都不返回。课程:阅读错误消息。

答案 1 :(得分:1)

代码中的错误与方法重载无关。

你的第三个方法应该返回一个int。它有一个空的身体,所以它没有返回任何东西。如果将其更改为

int a(double q){
    return 0;
}

错误将消失