读者可能会想:“在区分重载方法的时候,为什么只能以类名和方法的形参列表作为标准呢?能否考虑用方法的返回值来区分呢?”
比如下面两个方法,虽然他们有相同的名字和形式参数,但却很容易区分他们:
void f() {}
int f() { return 1; }
如果编译器可以根据语境明确判断出语义,比如在int x = f()中,那么的确可以据此区分重载方法。
不过,有时候你并不关心方法的返回值,你想要的是方法调用的其他效果(这常被称为“为了副作用而调用”),这时候你可能会调用方法而忽略其返回值。
所以,如果想下面这样的调用方法:
f();
此时Java该如何才能判断调用哪一个f()呢?别人该如何理解这种代码呢?
因此,根据方法的返回值来区分重载方法是行不通的。