Java的重载以及与重写的区别
一、什么是方法重载
方法的重载就是在同一个类中,有着若干个名字相同的方法。在具体调用这些方法的时候,通过传递参数的不同来调用这些重载方法。
二、为什么需要方法重载
- 方法名的定义需要做到见名知意,功能类似的方法一定程度上注定了方法名的相同,重载的使用有好的解决了这种因见名知意带来的方法名冲突。
- 重载可以提高代码的可读性和可维护性。方法名相同的方法在一起能够清晰知道每一个方法的区别,提高代码可读性,也方便后期的代码维护。
三、方法重载的规则
- 方法名必须相同
public static int add(int a){
return a+1;
}
public static int add(int a,int b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
}方法名必须相同,比如这里的add()方法,如果第二个add()方法改成add2()那就不是方法重载了。
- 方法的参数列表必须不相同。(方法的参数列表包括方法的参数个数以及参数类型和参数顺序)
- 参数个数不相同,还是上面代码:
public class Myclass { public static int add(int a){
return a+1;
}
public static int add(int a,int b){
return a+b;
}
public static int add(int a,int b,int c){
return a+b+c;
} public static void main(String[] args) {
System.out.println(add(1));
System.out.println(add(1,2));
System.out.println(add(1,2,3));
}
}运行结果如下:
2
3
6 - 参数类型不相同
public class Myclass { public static void add(int a,int b){
System.out.println(a+b);
}
public static void add(double a,double b){
System.out.println(a+b);
}
public static void main(String[] args) {
add(1,2);
add(1.2,2.3);
}
}运行结果:
3
3.5这里的参数不同,一个是int类型的参数,一个是double类型的参数,满足重载的条件
- 参数顺序不同也可以满足重载
public class Myclass { public static double add(double b,int a){
return a+b;
}
public static double add(int a,double b){
return a*b;
}
public static void main(String[] args) {
System.out.println(add(1.2,2));
System.out.println(add(2,2.0));
}
}运行结果:
3.2
4.0这里对参数顺序进行调换位置,编译器依旧能够找到对应的方法。
- 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错,这叫做重载分辨。
- 参数个数不相同,还是上面代码:
四、方法重载的注意事项
- 方法的返回类型可以相同也可以不相同。
这里让参数保持一致,改变方法类型。根据IDEA提示发现无法在参数一致的时候通过方法返回类型来进行方法重载
当适当的改变方法参数,代码如下,编译通过。
public class Myclass { public static int add(int a,int b){
return a+b;
}
public static double add(int a,double b){
return a+b;
}
public static void main(String[] args) {
System.out.println(add(1,2)); //输出3
System.out.println(add(1,2.0)); //输出3.0
}
}由上可知,方法重载的关键是在参数列表上,仅仅返回类型不同不足以称为方法的重载,方法的返回类型可以相同也可以不相同。
- 方法的修饰符并不影响方法的重载。
我们改变上例中方法的修饰符。结果正常输出:
public class Myclass { public static int add(int a,int b){
return a+b;
}
static double add(int a,double b){
return a+b;
}
public static void main(String[] args) {
System.out.println(add(1,2)); //输出3
System.out.println(add(1,2.0)); //输出3.0
}
} - main方法也可以被重载。
public class Myclass {
public static void main(String name) {
System.out.println(name+"你好");
}
public static void main(String[] args) {
main("ThreePure");
}
}main方法可以重载,只不过虚拟机只调用带字符串公共类型的main方法,public static void main(String[] args){}。
五、方法重载与方法重写的区别
| 重载 | 重写 | |
| 相同 | 方法名称相同 | |
| 英文 | Overloading | Overiding |
| 范围 | 同一个类 | 继承中的子类 |
| 区别 | 需要参数列表不同 | 只有方法体不同,方法列表也必须相同 |
| 其他要求 | 对修饰符,返回值类型没有特殊要求 | 对权限等其他都有特定要求 |
区别重载和重写的最好的判断方法就是是否出现在继承中,以及参数列表是否必须完全相同。
Java的重载以及与重写的区别的更多相关文章
- Java 方法重载与方法重写
方法重载(Overload): 1.在同一个类中 2.方法名相同 3.参数的个数或类型不同 4.与方法的返回类型无关 5.与方法的修饰符无关 方法重写(Override): 方法重写必须是子类继承父类 ...
- Java基础-方法重载和方法重写的区别
什么是java方法重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) ...
- Java中重载(overloading)和重写(Overriding)的区别
一:方法的重载 (1)方法重载指在类中定义方法名相同,参数不同的不同的多个方法(返回值类型可随意,不能以返回类型作为重载函数的区分标准). 参数不同表现: 1.参数的个数不同 2.参数的类型不同 3. ...
- Java面试 - 重载(Overload)和重写(Override)的区别?
1.重载是在同一个类中,可声明多个同名方法,但参数列表不同(参数顺序,个数,类型).而重写是在子类中,对从父类中继承的方法进行重新编写,但方法名,参数列表(参数顺序,个数,类型),返回值类型必须保持一 ...
- Java 方法重载,方法重写(覆盖),继承等细节注意
1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的 ...
- AJPFX总结方法重载与方法重写的区别
方法重载在同一个类中,可以出现同名方法,但是这些同名方法的参数列表必须不同,这样定义方法叫做方法重载.方法重载的特点重载的注意事项重载与返回值无关重载与具体的变量标识符无关重载只与方法名与参数相关重载 ...
- C#方法重载和方法重写的区别
一.重载的条件: 1.必须在同一个类中: 2.方法名必须相同: 3.参数列表不能相同. 二.重写的条件: 1. 在不同的类中2. 发生方法重写的两个方法返回值,方法名,参数列表必须完全一致(必须具有相 ...
- 【Java】重载(Overload)与重写(Override)
方法的语法 修饰符 返回值类型 方法名(参数类型 参数名){ ... 方法体 ... return 返回值; } 重载(overload) /** * 重载Overload: * 同一个类中,多个方法 ...
- overload(重载) 和 override(重写)的区别
overload(重载): 重载是基于一个类中,方法名相同,参数列表不同(如果参数列表相同时,参数的类型要不同),与返回值和访问修饰符都无关 如果在面试中就直接说:"同名不同参" ...
随机推荐
- JVM学习——字节码(学习过程)
JVM--字节码 为什么要学字节码 字节码文件,有什么用? JVM虚拟机的特点:一处编译,多处运行. 多处运行,靠的是.class 字节码文件. JVM本身,并不是跨平台的.Java之所以跨平台,是因 ...
- jenkins针对不同用户显示不同项目
网上看了别人写的博客有点头晕 比如:https://www.cnblogs.com/kazihuo/p/9022899.html 典型的权限混乱,te用户可以读re用户的项目,re用户可以读te用户 ...
- Objective-C 基础教程第三章,面向对象编程基础知
目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...
- 『无为则无心』Python基础 — 61、Python中的迭代器
目录 1.迭代的概念 2.迭代器的概念 3.可迭代的对象(Iterable) 4.迭代器对象(Iterator) 5.迭代器的使用体验 (1)基本用法 (2)实际应用 1.迭代的概念 (1)什么是迭代 ...
- IDEA安装下载以及使用
IDE 集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器.编译器.调试器和图形用户界面等工具.集成了代 ...
- 为什么用Python,高级的Python是一种高级编程语言
Python特性 如果有人问我Python最大的特点是什么,我会毫不犹豫地告诉他:它简单易学,功能强大.作为一个纯自由软件,Python有许多优点: 很简单.基于"优雅".&quo ...
- 【C# .Net GC】GC的类型与工作方式 和配置
.net主要有两种类型垃圾回收器,也可也说是垃圾回收器的两种工作模式. GC的类型主要有两种: 工作模式是针对进程的,程序启动后就不能修改了.只能在配置文件.json .xml进行设置.但是可用通过G ...
- Python:输入关键字进行百度搜索并爬取搜索结果
学习自:手把手教你用Python爬取百度搜索结果并保存 - 云+社区 - 腾讯云 如何利用python模拟百度搜索,Python交流,技术交流区,鱼C论坛 指定关键字,对其进行百度搜索,保存搜索结果, ...
- JAVA——运算符
目录 运算符 1.算术运算符 练习题: 2.关系运算符(比较运算符) 3.逻辑运算符 3.1&& 和 & 使用区别 3.2|| 和 | 使用区别 3.3 取反 基本规则 3.4 ...
- ASP.NET Core 6框架揭秘实例演示[18]:HttpClient处理管道
我们知道ASP.NET的核心就是由中间件组成的请求处理管道,HttpClient也采用了类似的设计.HttpClient管道由一组HttpMessageHandler对象构成,这些HttpMessag ...