是否可以为重载方法使用不同的返回类型?

Dun*_*hka 29 overloading

在方法重载中,是否可以为重载方法设置不同的返回类型?例如,

void foo(int x) ;
int foo(int x,int y);
double foo(String str);
Run Code Online (Sandbox Code Playgroud)

在一般的面向对象编程中,有可能吗?

Dun*_*hka 40

在一个类中,可以有几个共享相同名称但不同的方法

  1. 参数类型
  2. 参数数量
  3. 方法中声明的参数的顺序

通过依赖于为方法提供的参数,在运行时,编译器确定要执行的方法版本.

重载方法可能有也可能没有不同的返回类型.但是单独的返回类型不足以让编译器确定在运行时执行哪个方法.

  • "在运行时,编译器在运行时确定"AFAIK,而程序运行时编译器无法确定任何内容.和方法重载是**编译时多态性**的一个例子. (4认同)

San*_*yan 18

方法重载意味着在同一个类中具有两个或多个具有相同名称且具有不同参数的方法.方法重载的好处是它允许您实现支持相同语义操作但由参数编号或类型不同的方法.

重点

  • 重载方法必须更改参数列表
  • 重载方法可以更改返回类型
  • 重载方法可以更改访问修饰符
  • 重载方法可以声明新的或更广泛的已检查异常
  • 方法可以在同一个类或子类中重载


Ama*_*udu 17

不可能有一个具有相同参数和不同return类型的方法.编译器throws error在下面的例子中(重复方法).

方法1:

public int calc(int a, int b, int c)
Run Code Online (Sandbox Code Playgroud)

方法2:

public String calc(int e, int f, int g)
Run Code Online (Sandbox Code Playgroud)

抛出错误:

method calc(int, int, int) is already defined
Run Code Online (Sandbox Code Playgroud)


Nav*_*hra 5

在不同返回类型的情况下,不可能进行方法重载,因为编译器无法确定他需要调用哪个方法。


bha*_*ran 5

答案是否定的。

Integer doSomething(){return null;}
String doSomething(){return null;}

main(){
    doSomething()
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,编译器永远不会知道要调用哪个方法。

注意 - 在编译时检查方法重载


Bre*_*ail 2

对于大多数支持方法重载的编程语言(Java、C#、C++...),如果参数类型不同,那么返回类型也可以不同。