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