繁体   English   中英

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

[英]method overloading with different signature and return type

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

引用Java Docs:

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

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

根据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,而您什么也不返回。 课程:阅读错误消息。

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

您的第三个方法应返回一个int。 它的身体是空的,因此不返回任何东西。 如果您将其更改为

int a(double q){
    return 0;
}

错误将消失

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM