2015-04-04 108 views
1

方法重载是可能的仅当重载的方法具有不同的签名。 如果签名相同并且只有返回类型不同,则不可能。从Java文档带有不同签名和返回类型的方法重载

报价:

鉴别方法时,编译器不考虑返回类型,所以即使他们有不同的返回类型不能声明两种方法具有相同签名。

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

+0

什么是JLS必须要在这说什么? – 2015-04-04 18:19:52

+1

请显示给出错误的代码。 – Eran 2015-04-04 18:20:56

+0

你的错误是 - 你没有返回任何东西!你的'int a(...)'方法被声明为返回一个int并且你什么也没有返回。课程:阅读错误消息。 – 2015-04-04 18:25:47

回答

3

这应该是确定每JLS 8.4.9

...还有就是返回类型之间或抛出的两种方法具有相同名称的条款,除非他们的签名是覆盖当量之间没有必要的关系。

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

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

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

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

int a(double q){ 
    return 0; 
} 

错误就会消失

相关问题