刚开始学习面向对象编程语言的时候,很多人都有以下一个疑问:为什么不根据返回值对方法进行重载,而只是根据方法的参数呢。比如对下面的这两个方法,虽然它们有相同的名字和参数,但是其实是很容易区分的:
void func(){};
int func(){};
只要根据上下文判断返回值类型就行了,但是有以下情况:我们调用func()方法,而且忽略返回值类型,比如
func();
这个时候,我们关心的不是返回值,而是方法本身的其他效果。此时,就无法区分出到底是调用的哪个方法,所以,不能根据返回值类型来进行方法的重载。
void func(){};
int func(){};
只要根据上下文判断返回值类型就行了,但是有以下情况:我们调用func()方法,而且忽略返回值类型,比如
func();
这个时候,我们关心的不是返回值,而是方法本身的其他效果。此时,就无法区分出到底是调用的哪个方法,所以,不能根据返回值类型来进行方法的重载。