Java——重载

news2024/11/24 17:54:23

一、重载(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;
	} 
}

运行结果:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从零到一,四步战略解锁AI产品经理大门

前言 在当今科技飞速发展的背景下,越来越多的职场人士将目光投向了人工智能(AI)领域,寻求职业发展的新机遇。其中,AI产品经理和技术工程师作为该领域的两大明星岗位,凭借其高薪和广阔的职业发展前景&#…

深入解析TF-IDF算法:文本分析的基石与力量

在信息爆炸的时代文本数据无处不在,从新闻报道到社交媒体帖子,从学术论文到产品评论,大量的文本信息需要被有效地分析和利用。在这样的背景下TF-IDF(Term Frequency-Inverse Document Frequency)算法作为一种简单而有效…

LabVIEW输送机动态特性参数监测系统

开发了一套基于LabVIEW软件和STM32F103ZET6单片机的带式输送机动态特性参数监测系统。该系统通过电阻应变式压力传感器和光电编码器实时采集输送带的张力和带速信息,通过5G模块将数据传输至上位机,实现数据的可视化处理与实时预警,有效提高输…

vue3+vite:动态引入静态图片资源

目录 第一章 前言 第二章 vue2与vue3动态引入静态图片资源 2.1 vue2 webpack动态引入静态图片资源 2.1.1 了解 2.1.2 vue2项目动态引入静态图片资源 2.2 vue3 vite动态引入静态图片资源 2.2.1 了解 2.2.2 require vs import了解 2.2.3 vue3vite 项目动态引入静态图片…

机器视觉:工业相机的主要参数

工业相机是将目标物体的表面特征信息转化为数字信号(或者模拟信号)的一种采集设备。 一、工业相机的成像原理 工业相机主要由光电传感器和转换电路组成。 光线照射到被检测物体的表面,反射光经过透镜,再进入相机的光电传感器&a…

RuoYi: 企业级快速开发平台

目录 前言1 项目介绍1.1 简介1.2 特性 2 技术选型3 功能方面4 代码解释4.1 控制器层示例4.2 服务层示例4.3 数据访问层示例 4 推荐理由4.1 高效开发4.2 灵活性和扩展性4.3 完善的功能和安全性4.4 活跃的开源社区 结语 前言 在现代企业级应用开发中,高效、稳定、安全…

MicroPython 环境下使用 ESP32 连接百度 AI 大模型

前言 在物联网领域,ESP32 由于其丰富的功能和低功耗性能成为了一种流行的选择。结合 MicroPython,它为开发者提供了一个高效的开发环量,让 Python 程序员也能轻松介入到嵌入式系统和 IoT 应用的开发之中。本文将介绍如何利用这些技术&#x…

巴西:海外媒体投放,大舍传媒实现企业与巴西媒体间的交流

引言 随着全球化的进程,海外市场的开拓对于企业的发展至关重要。巴西作为南美洲最大的经济体和人口大国,具有巨大的商机。在与巴西媒体的交流中,大舍传媒的投放成为了一种高效的宣传和合作途径。 巴西媒体的多样性 巴西媒体以其丰富多样的…

【启明智显彩屏应用】Model3A 7寸触摸彩屏的充电桩应用方案

一、充电桩概述 (一)充电桩诞生背景 随着社会的进步和人们生活质量的提升,汽车已逐渐融入每个家庭的日常生活中。然而,汽车数量的激增也带来了严重的环境污染问题,特别是尾气排放。为了应对这一挑战,新能源…

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

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

tyflow线相关教程一

线下落 粒子路径 样条线形成模型 样条曲线建立模型 闪电

Chromium源码阅读:Mojo实战:从浏览器JS API 到blink实现

​ 通过在前面几篇文章,我们粗略梳理了Mojo这套跨进程通信的设计思路和IDL细节。 实际上,Mojo不止是跨进程通信框架,而是跨语言的模块通信自动化系统。 在浏览器暴露的JS API,也是需要通过Mojo这个系统进行桥接,最终…

LLaMA Factory多卡微调的实战教程(持续更新)

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

PC微信逆向) 定位微信浏览器打开链接的call

首发地址: https://mp.weixin.qq.com/s/Nik8fBF3hxH5FPMGNx3JFw 前言 最近想写一个免费的微信公众号自动采集的工具,我看公众号文章下载需求还挺多的。搜了下github,免费的工具思路大多都是使用浏览器打开公众号主页获取到需要的请求参数,例…

vue+java实现简易AI问答组件(基于百度文心大模型)

一、需求 公司想要在页面中加入AI智能对话功能,故查找免费gpt接口,最终决定百度千帆大模型(进入官网、官方文档中心); 二、主要功能列举 AI智能对话;记录上下文回答环境;折叠/展开窗口&#…

从0到1搭建MCU芯片上操作系统环境。开发都需要哪些环节和准备

MCU芯片环境搭建与操作系统上载步骤 1. 硬件准备 选择合适的MCU芯片,例如STM32、GD32等。 准备开发板,用于硬件连接和实验。 准备必要的外围设备,如电源适配器、USB转串口模块等。 2. 软件环境搭建 安装编程语言环境,如C/C编译…

2024年中漫谈

不知不觉,2024年已来到了6月,博主不禁感叹时光易逝,岁月的车轮滚滚向前,永不止步,此刻无关贫穷与富裕,伟大与平凡。 于是乎,宇宙(时空)看似毫无终点,一望无垠…

for循环结构

循环: 循环是一个重复执行一个代码的结构。只要满足循环的条件,会一直执行这个代码。 循环条件:在一定范围之内,按照指定的次数来执行循环。 循环体:在指定的次数内,执行的命令序列。只要条件满足&#…

【深度优先搜索 广度优先搜索】297. 二叉树的序列化与反序列化

本文涉及知识点 深度优先搜索 广度优先搜索 深度优先搜索汇总 图论知识汇总 LeetCode297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传…

GUI初步开始(matlab)

GUI初步开始(matlab) (自用笔记) 打工人艰辛速成,花几个小时从零到能用,记录下details and problems: 甲方要求:GUI界面,读下位机,找到解码后格式中所需要的…