Java——重载

一、重载(Overload)

1、重载是什么

方法重载(Method Overloading)是Java中实现多态的一种方式。它允许在同一个类中定义多个同名的方法,只要这些方法的参数列表不同。这些不同的参数列表可以通过不同的参数类型、参数数量或参数顺序来实现。

经常使用的 println 方法可已打印不同的数据类型就是重载实现的。

这里的不同的参数列表就实现了方法重载。

2、重载条件

重载的条件就是方法的方法名一样,参数列表不同。参数列表不同有多个情况:

1)参数类型不同

不同的参数类型可以实现方法重载。

void print(int a) {
    System.out.println("int: " + a);
}

void print(double a) {
    System.out.println("double: " + a);
}

2)参数数量不同

不同的参数数量可以实现方法重载。

void print(int a) {
    System.out.println("int: " + a);
}

void print(int a, int b) {
    System.out.println("int: " + a + ", int: " + b);
}

3)参数顺序不同

同样类型但顺序不同的参数也可以实现方法重载。

void print(int a, double b) {
    System.out.println("int: " + a + ", double: " + b);
}

void print(double a, int b) {
    System.out.println("double: " + a + ", int: " + b);
}

3、方法重载的优点

  • 提高代码可读性:使用相同的方法名称,有助于统一语义,增强代码的可读性。
  • 灵活性和简洁性:可以根据不同的输入参数进行不同的处理,增强代码的灵活性和简洁性。

4、重载注意事项

返回类型不同不能作为重载依据:方法重载与返回类型无关,只看参数列表。

参数名称不同不能作为重载依据:方法重载与参数名称无关,只看参数列表。

方法修饰符无关:访问修饰符(如publicprivate等)不影响方法重载。

抛出异常无关:方法抛出的异常类型和数量不会影响重载。

二、重载示例

1、计算两个数据的和

下面的代码实现方法重载,一个方法是两个 int 参数,一个是两个 double 参数,两个方法方法名相同,实现重载,传入参数不同调用的方法不同。

public class Test {
	public static void main(String[] args) {
		Calculator myCalculator = new Calculator();
		int resOfInt = myCalculator.getSum(1, 2);//这里调用的是两个int参数的方法
		double resOfDouble = myCalculator.getSum(1.1, 1.2);//这里调用的是两个double参数的方法
		System.out.println("resOfInt = " + resOfInt);
		System.out.println("resOfDouble = " + resOfDouble);
	}
}

class Calculator{
	
	//参数为两个int
	public int getSum(int a, int b) {
		return a + b;
	}

	//参数为两个double
	public double getSum(double a, double b) {
		return a + b;
	}
}

运行结果:

可以发现传入的参数不同,调用的方法不同。

2、计算两个数据的最大值

public class Test {
	public static void main(String[] args) {
		Max max = new Max();
		int resOfInt = max.getMax(1, 2);
		double resOfDouble = max.getMax(1.1, 2.2);
		System.out.println("resOfInt = " + resOfInt);
		System.out.println("resOfDouble = " + resOfDouble);
	}
}

class Max {
	
	//两个int型的参数
	public int getMax(int a, int b) {
		return a > b ? a : b;
	}

	//两个double型的参数
	public double getMax(double a, double b) {
		return a > b ? a : b;
	}
}

运行结果:

三、重载细节

1、参数兼容

public class Test {
	public static void main(String[] args) {
		Max max = new Max();
		double res = max.getMax(2.2, 3.2, 4);//最后一个参数传的是int型,
		//但依旧可以调用三个double类型的那个方法,
		//是因为int可以自动转换为double类型
		//这里最大值为4,因为自动转换为double类型,所以
		//下面会打印4.0
		System.out.println("res = " + res);
	}
}

class Max {
	
	//两个int型的参数
	public int getMax(int a, int b) {
		return a > b ? a : b;
	}

	//两个double型的参数
	public double getMax(double a, double b) {
		return a > b ? a : b;
	}

	//三个double类型的参数,求三个数的最大值
	public double getMax(double a, double b, double c) {
		double max = a > b ? a : b;
		return max > c ? max : c;
	}
}

运行结果:

可以发现方法重载时,方法调用的基本原理还是适用的,调用时,传入的参数只要与参数列表兼容(同一类型或者可以自动转换),就可以调用。

2、最适配的方法

public class Test {
	public static void main(String[] args) {
		Max max = new Max();
		double res = max.getMax(2.2, 3.2, 4);//最后一个参数传的是int型,
		//会调用两个double,一个int的方法,调用最适配的方法
		System.out.println("res = " + res);
	}
}

class Max {
	
	//两个int型的参数
	public int getMax(int a, int b) {
		return a > b ? a : b;
	}

	//两个double型的参数
	public double getMax(double a, double b) {
		return a > b ? a : b;
	}

	//三个double类型的参数,求三个数的最大值
	public double getMax(double a, double b, double c) {
		double max = a > b ? a : b;
		return max > c ? max : c;
	}

	//两个double类型的参数,一个int类型的参数
	public double getMax(double a, double b, int c) {
		System.out.println("调用的是:public double getMax(double a, double b, int c)");
		double max = a > b ? a : b;
		return max > c ? max : c;
	} 
}

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言UI框架先绘制一些常用UI面板,设置为预制件提示弹窗用户列表菜单输入框弹窗 创建各个面板的脚本控制代码控制菜单界面按钮事件 源码结束语 前言 本节主要实现UI框架调用不同的面板界面 UI框架 不懂UI框架的设计思路…

visdom使用时所遇的问题及解决方法

最近在用visdom进行可视化的过程中,虽然可有效的避免主机拒绝访问(该问题的解决方法,请参考深度学习可视化工具visdom使用-CSDN博客)即在终端输入python -m visom.server 1.训练过程中visdom出现ValueError: too many file descr…

Kali之metasploit学习

目标:尝试使用metasploit制作一个windows 后门(exe文件) 一:使用metasploit生成一个exe安装包。 二、将对应的可执行文件放入到目标机 python3 -m http.server 端口号: 模块化启动一个端口。 windows 证书管理工具&…

【UIDynamic-动力学-复习昨天的内容-预习今天的内容 Objective-C语言】

一、复习昨天的内容 1.昨天我们学了,核心动画,核心动画呢,它是作用于CALayer上的,所以,我们先说了CALayer,然后,说了一个核心动画的问题, 关于这个CALayer啊,这个Layer的一些基本的属性, 1)边框:testView.layer.borderWidth = 10;// 边框是border开头儿的 2)边…

VMware安装ubuntu22.4图文教程

一 、下载镜像 下载地址:Index of /ubuntu-releases/22.04.4/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 二、创建虚拟机 打开VMware点击左上角文件,创建新的虚拟机,打开后如下图: 下一步,镜像文件就是…

滚动条样式

/*滚动条*/ //滚动条没有滑块的轨道部分. ::-webkit-scrollbar-track-piece {background: #fff;border-radius: 0px;opacity: 1;border: 1px solid #D9D9D9; } //整个滚动条 ::-webkit-scrollbar {width: 8px;height: 8px;background-color: transparent; } //滚动条上的滚动滑…

java.nio.charset.UnmappableCharacterException

问题 java.lang.IllegalArgumentException: java.nio.charset.UnmappableCharacterException: Input length 1 解释为编码转换有问题 问题错在位置 非汉字存在 打包的时候就会报异常

HTML列表和表格标签

目录 1.列表标签 1.1无序列表 1.2有序列表 1.3定义列表 2. 表格标签、 2.1表格标签的属性 2.2合并单元格 1.列表标签 1.1无序列表 <ul>: [type 属性&#xff1a; disc( 实心圆点 )( 默认 ) 、 circle( 空心圆圈 ) 、 square( 实心方块 )] <li>: 列表中…

C语言| 编程获取数组的长度

用sizeof也可以获得整个数组在内存中所占的字节数。 总的字节数除以一个元素所占的字节数就是数组的总长度。 这样不管数组是增加还是减少元素&#xff0c;sizeof(a) /sizeof(a[0])都能自动求出数组的长度。 字符串中有一个strlen()函数可以求出字符数组中字符串的长度。 #inc…

【python】networkx库计算:特征向量中心度

目录 0.简介 1.前提 1&#xff09;ctrl R 唤出cmd 2&#xff09;安装networkx 3&#xff09;查看networkx版本 2.方法一&#xff1a;通过给出无向图计算特征向量中心度 1&#xff09;给出无向图&#xff0c;添加节点和边 2&#xff09;可以用以下代码将无向图用pyplot…

【每日一练】day3

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; &#x1f388;丠丠64-CSDN博客&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起…

透视环世物流:一个AI降本的产业典型样本

在过去的多年时间里&#xff0c;与其说低代码完成的数字原生的普惠&#xff0c;不如说其最强的能力恰是能帮助企业用最低的门槛、最高的效率构建出与自身适配的流程和业务应用&#xff0c;在底层帮助企业构建出一个被极致拆分和分子化的软件开发中台。 而透过环世物流&#x…

Prometheus——部署详解

目录 一、Prometheus Server端安装和相关配置 1.上传安装包并解压 2.配置系统启动文件 3.启动 二、部署Node Exporters监控系统指标 三、监控Mysql配置示例 1.Mysql服务器操作 2.Prometheus服务器操作 四、监控Nginx配置示例 1.在Nginx服务器操作 2.Prometheus服务器…

Nexus搭建maven私有仓库

目录 1.Nexus介绍 2.操作步骤 1.下载Nexus 2.安装和启动nexus 3.使用私服 1.登录管理员 2.私服介绍 1.配置参数认识 2.创建仓库 4.maven使用私库 1.安装maven 2.配置maven 3.在项目中打包部署和发布 5.向私库添加jar包 ​1.添加jar 2.使用jar 1.Nexus介绍 内网…

水泥行业超低排放简介

在当今社会&#xff0c;随着环保意识的不断提高&#xff0c;水泥行业作为重要的工业领域&#xff0c;其超低排放的实施范围及成效日益受到人们的关注。朗观视觉小编将从多个角度探讨水泥行业超低排放的实施范围&#xff0c;分析其背后的意义与影响&#xff0c;展望未来的发展趋…

【Linux】段错误(核心已转储)(core dumped)问题的分析方法

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

美摄科技匿名化处理解决方案,包含模糊、同色、马赛克、效果遮挡等各种形式

信息安全已成为企业发展中不可忽视的重要一环&#xff0c;随着信息安全法规的日益严格和公众对个人隐私保护意识的不断提高&#xff0c;企业如何在保障业务顺畅进行的同时&#xff0c;满足信息安全和隐私保护的要求&#xff0c;成为了亟待解决的问题。美摄科技凭借其强大的技术…

Stable Diffusion: ControlNet Canny检测

同样在ControlNet中&#xff0c;尝试换为Canny检测 拖放原始姿态图片。 勾选“启用”&#xff0c;“完美像素模式”&#xff0c;“允许预览” 控制类型选择“Canny(硬边缘&#xff09;” 预处理器选“canny”&#xff0c;会对原始姿态图片做Canny边缘检测 模型部分会自动选…

端点物联开发教程之(二)开发演示

目录 一、产品定义 二、基础资源下载 三、嵌入式端开发 3.1 工程搭建 3.2 模型文件修改 3.3 头文件定义 3.4 模型功能开发 3.5 mqtt应用层配置 3.6启动任务 四、用户后端开发 4.1 功能分析 4.2 创建模型文件 4.3 添加基础功能 4.4 数据更新 4.5 阈值设置 4.6 模…

HCIA6以太网基础基于MAC划分VLAN

&#xff08;简写的命令可以敲Tab按键补全剩余&#xff09; 1.组网需求 场景&#xff1a;公司的网络中&#xff0c;管理者将同一部门的员工划分到VLAN10。要求只有本部门员工的PC接入才能互访&#xff0c;其他PC接入交换机属于其他VLAN&#xff08;666&#xff09;。可以配置…