当前位置: 首页 > news >正文

JAVA中的重载

在Java中,方法重载(Overloading)是一种让类以统一的方式处理不同类型数据或不同数量参数的技术。重载是通过改变方法的参数列表来实现的,包括参数的类型、数量或顺序,而方法的名称和返回类型则保持不变。这使得同一个类中可以存在多个同名方法,只要它们的参数列表不同即可。

1. 方法重载的基本规则

在Java中,要实现方法重载,需要遵循以下基本规则:

  • 方法名必须相同:重载的方法必须具有相同的名称。
  • 参数列表必须不同:这可以通过改变参数的数量、类型或顺序来实现。
  • 返回类型可以不同:但返回类型不是决定方法是否重载的因素。
  • 修饰符可以不同:如public、protected、private等,但也不是决定重载的因素。
  • 异常列表可以不同:但异常列表也不是重载的依据。

 2. 示例代码

接下来,我们通过一个具体的例子来展示如何在Java中实现方法重载。假设我们有一个类`Calculator`,它包含几个用于执行不同数学运算的重载方法。


 

public class Calculator {// 第一个加法方法,接受两个int类型的参数public int add(int num1, int num2) {return num1 + num2;}// 第二个加法方法,接受两个double类型的参数public double add(double num1, double num2) {return num1 + num2;}// 第三个加法方法,接受三个int类型的参数public int add(int num1, int num2, int num3) {return num1 + num2 + num3;}// 减法方法,接受两个int类型的参数public int subtract(int num1, int num2) {return num1 - num2;}// 减法方法,接受两个double类型的参数public double subtract(double num1, double num2) {return num1 - num2;}// 乘法方法,接受两个int类型的参数public int multiply(int num1, int num2) {return num1 * num2;}// 乘法方法,接受两个double类型的参数public double multiply(double num1, double num2) {return num1 * num2;}// 除法方法,接受两个int类型的参数,返回double以保留小数public double divide(int num1, int num2) {if (num2 != 0) {return (double) num1 / num2;} else {throw new IllegalArgumentException("除数不能为0");}}// 除法方法,接受两个double类型的参数public double divide(double num1, double num2) {if (num2 != 0.0) {return num1 / num2;} else {throw new IllegalArgumentException("除数不能为0.0");}}// 主方法,用于测试public static void main(String[] args) {Calculator calc = new Calculator();// 测试加法System.out.println("5 + 3 = " + calc.add(5, 3));System.out.println("2.5 + 3.5 = " + calc.add(2.5, 3.5));System.out.println("5 + 3 + 2 = " + calc.add(5, 3, 2));// 测试减法System.out.println("10 - 5 = " + calc.subtract(10, 5));System.out.println("10.5 - 5.5 = " + calc.subtract(10.5, 5.5));// 测试乘法System.out.println("5 * 3 = " + calc.multiply(5, 3));System.out.println("2.5 * 3.5 = " + calc.multiply(2.5, 3.5));// 测试除法System.out.println("10 / 2 = " + calc.divide(10, 2));System.out.println("10.0 / 2.0 = " + calc.divide(10.0, 2.0));}
}

在上述代码中,我们定义了一个`Calculator`类,该类包含多个重载的方法用于执行加法、减法、乘法和除法运算。每个方法根据参数类型的不同而进行了重载,以确保每个方法都能处理特定类型的参数。

在`main`方法中,我们创建了一个`Calculator`对象,并使用这个对象来调用不同的方法进行计算。每次调用都会根据传入参数的类型和数量来选择相应的方法。

让我们运行这段代码,将得到以下输出:

5 + 3 = 8
2.5 + 3.5 = 6.0
5 + 3 + 2 = 10
10 - 5 = 5
10.5 - 5.5 = 5.0
5 * 3 = 15
2.5 * 3.5 = 8.75
10 / 2 = 5.0
10.0 / 2.0 = 5.0


 

这显示了不同的重载方法被正确调用,并执行了预期的数学运算。需要注意的是,在除法操作中,如果除数为0或0.0时,程序会抛出异常。这是为了防止除以零的错误情况发生。

3. 方法重载的优点和注意事项

优点:

  • 提高代码可读性:使用不同参数列表的方法允许程序员更清楚地表达意图。
  • 提高代码的灵活性:方法重载使得类可以更灵活地处理不同类型的数据。
  • 减少代码量:不需要为每种数据类型编写一个单独的函数或类。
  • 提高代码的可维护性:更改参数类型或添加新类型的参数通常比修改返回类型或修改方法名称更容易理解和维护。

注意事项:

  • 方法重载不应该改变方法的可见性(public, private, protected)。如果改变了方法的可见性,那么它就不是真正的重载了。
  • 如果两个方法有相同的参数类型、数量和顺序,但返回类型不同,那么它们不是重载的;它们会引发编译错误,因为Java不支持返回类型的重载(C++支持)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • opencv-图像仿射变换
  • 北京汽车美容元宇宙:数字化浪潮下的车美服务新革命
  • JavaScript 对话框式弹出提示框 PopoverTip 实现详解
  • JavaFX布局-ToolBar
  • 【前端】JavaScript入门及实战111-115
  • 关于C/C++的编译、构建、CMake、x86_amd64等问题(自用)
  • 浅谈Trie树算法
  • 开启休假模式
  • WebSocket 协议与 HTTP 协议、定时轮询技术、长轮询技术
  • Linux 安装 Redis 6.2.14
  • vulhub靶场之wordpress关卡(保姆级教程)
  • 大数据Flink(一百零七):阿里云Flink的应用场景
  • npm ERR! missing script: serve
  • 基于MPC在线优化的有效集法位置控制器simulink建模与仿真
  • 免杀笔记 ---> 函数踩踏 PEB寻址
  • JavaScript-如何实现克隆(clone)函数
  • [deviceone开发]-do_Webview的基本示例
  • JavaScript 奇技淫巧
  • Joomla 2.x, 3.x useful code cheatsheet
  • magento2项目上线注意事项
  • PHP CLI应用的调试原理
  • python_bomb----数据类型总结
  • REST架构的思考
  • Shell编程
  • Spring声明式事务管理之一:五大属性分析
  • web标准化(下)
  • 大整数乘法-表格法
  • 关于Flux,Vuex,Redux的思考
  • 时间复杂度与空间复杂度分析
  • 手写一个CommonJS打包工具(一)
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 源码安装memcached和php memcache扩展
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 如何在招聘中考核.NET架构师
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • ‌移动管家手机智能控制汽车系统
  • # Apache SeaTunnel 究竟是什么?
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (19)夹钳(用于送货)
  • (20)docke容器
  • (4)logging(日志模块)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (阿里云万网)-域名注册购买实名流程
  • (十七)Flink 容错机制
  • (实战篇)如何缓存数据
  • (四)Android布局类型(线性布局LinearLayout)
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (原創) 未来三学期想要修的课 (日記)
  • (转)http协议
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务