重载为什么与返回值无关
我以前和你一样,对java中为什么不能根据返回值进行重载,而只能根据方法的参数进行重载非常不理解。在网上看到各种答案都不能完全的说服我,直到有一天突然就想通了。
假设根据返回值可以进行方法重载,在类中写下这两个方法,如图所示:
编译直接报红,不通过。提示翻译过来是’testMethod()'已经定义在Main类中了,不要重复定义的意思。但是有人就会疑惑,他们的返回值类型不同啊,怎么能说是重复定义了呢?
为了解释这个问题,下面我们假设编译是通过的,不会出现报红的情况:
public class Main {
public static void testMethod(){
//假设编译通过
}
public static int testMethod(){
}
public static void main(String[] args) {
int i = testMethod();
//这种情况还说的过去 知道是调用哪个方法
testMethod();
//但是这种情况,不管该方法有没有返回值都可以这么调用的。
//此时编译器就要去猜你到底想调用哪个方法呢?
//或许是因为编译器懒得去猜吧,干脆规定只是返回值不同的两个方法就看做是同一个方法,判定为重复定义,然后让你的方法编译不通过。
//所以说java中为什么不能根据返回值进行重载,现在应该明白了吧。
}
综上所诉:java中是不能根据返回值进行方法重载的。