编译、运行上面程序完全正常,虽然 3 个max() 方法的方法名相同,但因为它们的形参列表不同,所以系统可以正常区分出这 3 个方法。当运行时,Java 虚拟机会根据传递过来的不同参数来调用不同的方法。运行结果如下:1 与5比较,较大的是: 5 5.205 与5.8 比较,较大的是: 5.8 2.15、0.05、58 中,较大的是: 58.0为什么方法重载不能用方法的返回值类型区分呢?
对于int f( ) { }和void( ) { }两个方法,如果这样调用int result = f();,系统可以识别是调用返回值类型为 int 的方法,但Java 调用方法时可以忽略方法返回值,如果采用如下方法来调用f();,你能判断是调用哪个方法吗?如果你尚且不能判断,那么 Java 系统也会糊涂。在编程过程中有一条重要规则就是不要让系统糊涂,系统一糊涂,肯定就是你错了。因此,Java 里不能用方法返回值类型作为区分方法重载的依据。