返回值不同算方法重载么?为什么?

简介: 本文解释了为什么返回值不同不算方法重载,强调了方法重载是基于方法名称和参数列表的,而返回值不是方法重载的考虑因素,因为返回值不影响JVM的方法签名,也不会造成编译时的歧义。

1、典型回答

返回值不同不算方法重载

方法重载(Overloading)是指在同一个类中定义了多个同名方法,但它们的参数列表不同,方法重载要求方法:

  1. 名称相同
  2. 参数类型、参数个数或参数顺序,至少有一个不同

方法重载的目的是提供更多的方法选择,方便程序员根据不同的参数类型或个数来调用合适的方法

所以,从上面方法重载的要求可以得出,返回值不同是不作为方法重载的依据的

2、全面剖析

为什么返回值不同不算方法重载的原因有两个:

  1. 从程序的执行层面来讲:返回值不同如果作为方法重载,那么会产生歧义
  2. 从 JVM 方法签名的角度来讲:返回值并不属于方法签名的一部分,因此无法定位到具体的调用方法

什么是方法签名?

方法签名(Method Signature)指的是方法的唯一标识,包括方法的名称、参数列表和参数的顺序。方法签名用于区分不同的方法,以便编译器和虚拟机能够正确地识别和调用特定的方法

2.1、程序执行层面

从程序的执行层面来讲,如果方法的返回值作为方法重载的依据的话,那么程序的执行就会产生歧义,例如以下代码:

此时,我们程序就不知道要去执行哪个方法了

2.2、JVM方法签名层面

方法签名由以下两部分组成:

  1. 方法名称:方法的名称用于标识该方法的功能和用途
  2. 参数列表:参数列表指定了方法接收的参数类型和参数顺序,每个参数都包括参数的类型和参数的名称。

JVM 是通过方法签名来定位到要调用的方法的,而在方法签名中并没有返回值,因此返回值并不能作为方法重载的依据

3、知识扩展

方法重载和方法重写有什么区别?

方法重载和方法重写有什么区别?

目录
相关文章
|
6月前
|
Java
java反射-动态调用方法(无参无返回值、有参无返回值、有参有返回值)
java反射-动态调用方法(无参无返回值、有参无返回值、有参有返回值)
|
Java
Java方法的重载、可变个数形参、方法参数的值传递机制
Java方法的重载、可变个数形参、方法参数的值传递机制
102 0
|
Java
一文学会java方法重载,可变参数
1.概述 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。 最常用的地方就是构造器的重载。
176 0
|
Java
java方法详解(有无返回值、重载)
方法一般创建在mian方法外,方法比较害羞,不调用就不执行
159 0
C#编程-108:调用泛型方法
C#编程-108:调用泛型方法
C#编程-108:调用泛型方法
|
Java C++
Java方法03——构造方法与可变参数
Java方法03——构造方法与可变参数
608 0
Java方法03——构造方法与可变参数
方法的返回值类型为引用数据类型时
方法的返回值类型为引用数据类型:   基本数据类型:(基本类型太简单,我不准备讲解)   引用数据类型:     1.方法的返回值类型为类名时:返回的是该类的对象。     2.方法的返回值类型为抽象类名时:返回的是该类的子类对象。
939 0