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

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

1、典型回答

返回值不同不算方法重载

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

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

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

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

2、全面剖析

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

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

什么是方法签名?

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

2.1、程序执行层面

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

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

2.2、JVM方法签名层面

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

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

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

3、知识扩展

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

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

目录
相关文章
|
机器学习/深度学习 算法 数据库
Dataset之LFW:LFW人脸数据库的简介、安装、使用方法之详细攻略
Dataset之LFW:LFW人脸数据库的简介、安装、使用方法之详细攻略
Dataset之LFW:LFW人脸数据库的简介、安装、使用方法之详细攻略
|
编译器 C++ 开发者
【C/ C++链接】深入C/C++链接:从基础到高级应用(一)
【C/ C++链接】深入C/C++链接:从基础到高级应用
403 0
|
Java API Apache
如何在Java中实现图片处理
如何在Java中实现图片处理
什么是绝对路径,什么是相对路径,绝对路径和相对路径的区别?
什么是绝对路径,什么是相对路径,绝对路径和相对路径的区别?
6467 0
|
监控
ThreeJs限制模型拖动的范围
这篇文章讲解了在Three.js中如何限制模型拖动的范围,确保模型在特定边界内移动,提供了实现拖动限制的代码示例和技术细节。
410 1
ThreeJs限制模型拖动的范围
|
前端开发 Java API
Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版
本文提供了一份详细的Swagger接口文档生成工具的使用教程,包括了导入依赖、配置类设置、资源映射、拦截器配置、Swagger注解使用、生成接口文档、在线调试页面访问以及如何设置全局参数(如token),旨在帮助Java开发者快速上手Swagger。
8478 0
Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版
|
Java 编译器 Spring
面试突击78:@Autowired 和 @Resource 有什么区别?
面试突击78:@Autowired 和 @Resource 有什么区别?
16215 6
|
机器学习/深度学习 计算机视觉
【小样本图像分割-1】PANet: Few-Shot Image Semantic Segmentation with Prototype Alignment
本文介绍了ICCV 2019的一篇关于小样本图像语义分割的论文《PANet: Few-Shot Image Semantic Segmentation With Prototype Alignment》。PANet通过度量学习方法,从支持集中的少量标注样本中学习类的原型表示,并通过非参数度量学习对查询图像进行分割。该方法在PASCAL-5i数据集上取得了显著的性能提升,1-shot和5-shot设置下的mIoU分别达到48.1%和55.7%。PANet还引入了原型对齐正则化,以提高模型的泛化能力。
516 0
【小样本图像分割-1】PANet: Few-Shot Image Semantic Segmentation with Prototype Alignment
|
JSON 前端开发 Java
java系列之 页面打印出 [object Object],[object Object]
文章解释了在前端页面打印JSON对象时出现`[object Object]`的原因,并提供了使用`JSON.stringify(json对象)`方法将对象转换为可读字符串的解决方案。
java系列之 页面打印出 [object Object],[object Object]
|
存储 缓存 NoSQL
Redis从入门到精通之底层数据结构简单动态字符串(SDS)详解
SDS是Redis中的一种字符串类型,它是一种二进制安全的字符串,由简单动态字符串(SDS)实现。SDS支持多种数据结构,其中字符串(String)是最常用的一种数据结构之一。SDS的优点在于它可以避免C字符串常见的问题,比如缓冲区溢出和内存泄露等。SDS的常数复杂度获取字符串长度和杜绝缓冲区溢出可以避免使用strlen和strcat函数时的一些问题。同时,SDS的空间预分配和惰性空间释放两种策略可以减少修改字符串的内存重新分配次数。SDS也是二进制安全的,因为它不是以空字符串来判断字符串是否结束,而是以len属性表示的长度来判断字符串是否结束。SDS还兼容部分C字符串函数
977 83
Redis从入门到精通之底层数据结构简单动态字符串(SDS)详解
下一篇
oss云网关配置