1、典型回答
返回值不同不算方法重载
方法重载(Overloading)是指在同一个类中定义了多个同名方法,但它们的参数列表不同,方法重载要求方法:
- 名称相同
- 参数类型、参数个数或参数顺序,至少有一个不同
方法重载的目的是提供更多的方法选择,方便程序员根据不同的参数类型或个数来调用合适的方法
所以,从上面方法重载的要求可以得出,返回值不同是不作为方法重载的依据的
2、全面剖析
为什么返回值不同不算方法重载的原因有两个:
- 从程序的执行层面来讲:返回值不同如果作为方法重载,那么会产生歧义
- 从 JVM 方法签名的角度来讲:返回值并不属于方法签名的一部分,因此无法定位到具体的调用方法
什么是方法签名?
方法签名(Method Signature)指的是方法的唯一标识,包括方法的名称、参数列表和参数的顺序。方法签名用于区分不同的方法,以便编译器和虚拟机能够正确地识别和调用特定的方法
2.1、程序执行层面
从程序的执行层面来讲,如果方法的返回值作为方法重载的依据的话,那么程序的执行就会产生歧义,例如以下代码:
此时,我们程序就不知道要去执行哪个方法了
2.2、JVM方法签名层面
方法签名由以下两部分组成:
- 方法名称:方法的名称用于标识该方法的功能和用途
- 参数列表:参数列表指定了方法接收的参数类型和参数顺序,每个参数都包括参数的类型和参数的名称。
JVM 是通过方法签名来定位到要调用的方法的,而在方法签名中并没有返回值,因此返回值并不能作为方法重载的依据
3、知识扩展
方法重载和方法重写有什么区别?