Java方法的重载

Java方法的重载

  • 前言
  • 一、为什么要有重载
    • 代码示例
      • 问题
    • 代码示例
  • 二、重载的使用
    • 代码示例
  • 三、重载的规则
    • 针对同一个类
    • 代码示例


前言

推荐一个网站给想要了解或者学习人工智能知识的读者,这个网站里内容讲解通俗易懂且风趣幽默,对我帮助很大。我想与大家分享这个宝藏网站,请点击下方链接查看。
https://www.captainbed.cn/f1

Java方法的重载是指同一个类中可以有多个同名方法,但这些方法的参数列表(参数类型、参数个数或参数顺序)必须不同,以便在调用时能够根据参数列表区分具体调用哪个方法。

有些时候我们需要用一个函数同时兼容多种参数的情况, 我们就可以使用到方法重载.


一、为什么要有重载

Java中的重载(overloading)指的是可以在同一个类中定义多个方法,这些方法具有相同的名称但参数类型、参数个数或参数顺序不同。重载的目的是为了提高代码的可读性、可维护性和灵活性。

以下是Java中使用重载的几个主要原因:

  1. 方便使用:重载可以让程序员使用同一个方法名来执行不同的操作,这样可以减少方法名的数量,使代码更简洁清晰。例如,可以定义一个名为print的方法,使其能够接受不同类型的参数并打印出对应的结果。

  2. 灵活性:重载允许在不改变方法名称的情况下,根据需要适应不同的参数类型或参数个数。这样可以提供更多的使用选项,并满足不同场景下的需求。

  3. 可读性:重载方法可以使代码更易读。通过方法名的相似性和参数的类型或个数来区分方法,可以使代码更加易于理解和调用。

  4. 代码复用:使用重载可以在不同的方法中复用相似的代码逻辑。当多个方法执行类似的操作时,可以将这些共享的代码放到一个方法中,并通过重载来处理不同的参数类型。

需要注意的是,重载仅仅根据方法的参数类型、个数、顺序来判断调用哪个方法,与方法的返回类型无关。因此,如果仅通过返回类型的不同来区分方法,是无法实现重载的。

代码示例

class Main {public static void main(String[] args) {int a = 10;int b = 20;int ret = add(a, b);System.out.println("ret = " + ret);double a2 = 10.5;double b2 = 20.5;double ret2 = add(a2, b2);System.out.println("ret2 = " + ret2);}public static int add(int x, int y) {return x + y;}
}

在这里插入图片描述

问题

由于参数类型不匹配, 所以不能直接使用现有的 add 方法.

那么是不是应该创建这样的代码呢?

代码示例

class Main {public static void main(String[] args) {int a = 10;int b = 20;int ret = addInt(a, b);System.out.println("ret = " + ret);double a2 = 10.5;double b2 = 20.5;double ret2 = addDouble(a2, b2);System.out.println("ret2 = " + ret2);}public static int addInt(int x, int y) {return x + y;}public static double addDouble(double x, double y) {return x + y;}
}

在这里插入图片描述
这样的写法是对的(例如 Go 语言就是这么做的), 但是 Java 认为 addInt 这样的名字不友好, 不如直接就叫 add

二、重载的使用

代码示例

class Main {public static void main(String[] args) {int a = 10;int b = 20;int ret = add(a, b);System.out.println("ret = " + ret);double a2 = 10.5;double b2 = 20.5;double ret2 = add(a2, b2);System.out.println("ret2 = " + ret2);double a3 = 10.5;double b3 = 10.5;double c3 = 20.5;double ret3 = add(a3, b3, c3);System.out.println("ret3 = " + ret3);}public static int add(int x, int y) {return x + y;}public static double add(double x, double y) {return x + y;}public static double add(double x, double y, double z) {return x + y + z;}
}

在这里插入图片描述
方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数字相加.

同一个方法名字, 提供不同版本的实现, 称为 方法重载

三、重载的规则

在Java中,方法重载(Method Overloading)指的是在同一个类中可以定义多个方法,这些方法具有相同的名称但参数类型、参数个数或参数顺序不同。通过重载方法,可以在同一个类中为相似的操作提供多个不同的方式。

以下是在Java中使用方法重载的一些常见用法:

  1. 参数类型不同:通过参数的数据类型来区分方法。例如,可以定义一个名为sum的方法,一个接受两个整型参数,另一个接受两个浮点型参数。这样可以在不同情况下调用不同的方法。

  2. 参数个数不同:通过参数的个数来区分方法。例如,可以定义一个名为max的方法,一个接受两个整型参数,另一个接受三个整型参数。这样可以根据需要选择不同数量的参数进行计算。

  3. 参数顺序不同:通过参数的顺序来区分方法。例如,可以定义一个名为swap的方法,一个接受两个整型参数,另一个接受一个整型参数和一个字符参数。这样可以根据参数的顺序来决定调用哪个方法。

需要注意的是,方法重载仅仅是通过参数的不同来区分方法,与方法的返回类型无关。因此,方法重载不允许两个方法只有返回类型不同,否则会编译错误。

针对同一个类

在使用方法重载时,需要遵循以下规则:

  • 方法名必须相同。
  • 参数列表必须不同(类型、个数、顺序)。
  • 返回类型可以相同也可以不同,但不能仅根据返回类型来区分方法。
  • 方法的修饰符可以不同。
  • 方法的异常声明可以不同。

通过合理使用方法重载,可以提高代码的可读性、可维护性和灵活性,使程序更加具有弹性和适应性。

代码示例

class Main {public static void main(String[] args) {int a = 10;int b = 20;int ret = add(a, b);System.out.println("ret = " + ret);}public static int add(int x, int y) {return x + y;}public static double add(int x, int y) {return x + y;}
}

在这里插入图片描述
当两个方法的名字相同, 参数也相同, 但是返回值不同的时候, 不构成重载.


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/330145.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5好看的通用网站模板源码

文章目录 1.设计来源1.1 主界面1.2 模板菜单1 界面1.3 模板菜单2 界面1.4 模板菜单3 界面1.5 下拉菜单1 界面1.6 下拉菜单2 界面1.7 模板菜单4 界面1.8 模板菜单5 界面1.9 界面底部 2.效果和源码2.1 动态效果2.2 源码目录2.3 源代码 源码下载 作者:xcLeigh 文章地址…

django-celery-beat自动调度异步任务

Celery是一个简单、灵活且可靠的分布式系统,专门用于处理大量消息的实时任务调度。它支持使用任务队列的方式在分布的机器、进程、线程上执行任务调度。Celery不仅支持异步任务(如发送邮件、文件上传、图像处理等耗时操作),还支持…

深度学习之基于Tensorflow卷积神经网络(CNN)实现猫狗识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 在人工智能和深度学习的热潮中,图像识别是一个备受关注的领域。猫狗识别作为图像识…

记录Python低代码开发框架zdppy_amcrud的开发过程

实现新增接口 基础代码 import env import mcrud import api import snowflakeenv.load(".env") db mcrud.new_env()table "user" columns ["name", "age"]async def add_user(req):data await api.req.get_json(req)values [d…

跟TED演讲学英文:Do schools kill creativity by Sir Ken Robinson

Do schools kill creativity? Link: https://www.ted.com/talks/sir_ken_robinson_do_schools_kill_creativity Speaker: Sir Ken Robinson Date: February 2006 文章目录 Do schools kill creativity?IntroductionVocabularySummaryTranscriptAfterword Introduction Sir…

[AI Google] 10个即将到来的Android生态系统更新

新的体验带来了更强的防盗保护、手表电池寿命优化,以及对电视、汽车等的娱乐功能改进。 昨天,我们分享了Android如何以人工智能为核心重新构想智能手机。今天,我们推出了Android 15的第二个测试版,并分享了更多我们改进操作系统的…

webSocket+Node+Js实现在线聊天(包含所有代码)

这篇文章主要介绍了如何使用 webSocket、Node 和 Js 实现在线聊天功能。 重要亮点 💻 技术选型:使用 Node.js 搭建服务器,利用 Express 框架和 Socket.io 库实现 WebSocket 通信。 📄 实现思路:通过建立数组存储聊天…

Linux 软件包管理器 yum的下载、功能介绍及使用

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 Linux下的三种软件安装方…

项目如何有效做资源管理?易趋项目管理软件让资源管理可视化

在项目管理的过程中,有效的资源管理能够确保资源得到合理的分配和使用,避免资源的浪费和冗余,进而提高整体工作效率、确保项目的成功;同时降低组织的运营成本。 但在项目推进过程中,项目经理总会面临各种资源管理的难…

MyBatis从入门到“入土“

💕喜欢的朋友可以关注一下,下次更新不迷路!💕(●◡●) 目录 一、Mybatis为何物?👌 二、快速入门🤣 1、新建项目😊 2、数据库建表😊 3、导入依赖的jar包😊…

vue3 路由跳转 携带参数

实现功能:页面A 跳转到 页面B,携带参数 路由router.ts import { createRouter, createWebHistory } from "vue-router";const routes: RouteRecordRaw[] [{path: "/demo/a",name: "aa",component: () > import(&quo…

【软件设计师】2018年的上午题总结

2018 2018上半年2018下半年 2018上半年 1.小阶向大阶对齐 2.吞吐率是最长流水段操作时间的倒数 3.ssh的端口号是22 4.s所发送的信息使用s的私钥进行数字签名,t收到后使用s的公钥验证消息的真实性 5.数据流分析是被动攻击方式 6.《计算机软件保护条例》是国务院颁布…

226.翻转二叉树

翻转一棵二叉树。 思路: 指针做交换 用递归(前序or后序,中序不行) 前序:中左右 遍历到“中”的时候,交换它的左右孩子 然后分别对它的左孩子和右孩子使用“交换函数”(定义的)&a…

【论文阅读】使用深度学习及格子玻尔兹曼模拟对SEM图像表征粘土结构及其对储层的影响

文章目录 0、论文基本信息1、深度学习2、可运行程序—Matlab3、深度切片3、LBM模拟4、局限性 0、论文基本信息 论文标题:Characterizing clay textures and their impact on the reservoir using deep learning and Lattice-Boltzmann simulation applied to SEM i…

Python-温故知新

1快速打开.ipynb文件 安装好anaconda后,在需要打开notebook的文件夹中, shift键右键——打开powershell窗口——输入jupyter notebook 即可在该文件夹中打开notebook的页面: 2 快速查看函数用法 光标放在函数上——shift键tab 3...

CGAN|生成手势图像|可控制生成

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:TensorFlow入门实战|第3周:天气识别🍖 原作者:K同学啊|接辅导、项目定制 CGAN(条件生成对抗网络&#xf…

【Crypto】Rabbit

文章目录 一、Rabbit解题感悟 一、Rabbit 题目提示很明显是Rabbit加密,直接解 小小flag,拿下! 解题感悟 提示的太明显了

二分查找

题目链接 题目: 分析: 如果按照从头到尾的顺序一次比较, 每次只能舍弃一个元素, 效率是非常低的, 而且没有用到题目的要求, 数组是有序的因为数组是有序的, 所以如果我们随便找到一个位置, 和目标元素进行比较, 如果大于目标元素, 说明该位置的右侧元素都比目标元素大, 都可…

一键恢复安卓手机数据:3个快速简便的解决方案!

安卓手机作为我们不可或缺的数字伙伴,承载着大量珍贵的个人和工作数据。然而,随着我们在手机上进行各种操作,不可避免地会遇到一些令人头痛的问题,比如意外删除文件、系统故障或其他不可预见的情况,导致重要数据的丢失…

汽车生产线中的工业机器人应用HT3S-PNS-ECS(EtherCAT/Profinet)协议转换通讯方案案例分析

汽车生产线中的工业机器人应用HT3S-PNS-ECS(EtherCAT/Profinet)协议转换通讯方案案例分析 ——北京中科易联科技有限公司供稿—— 一、摘要 随着工业自动化的快速发展,汽车生产线对工业机器人的依赖日益增加。HT3S-PNS-ECS作为工业机器人中的关键组件,其…