网站首页 > java教程 正文
java方法重载定义
Java中的方法重载(Method Overloading)是指在同一个类中可以定义多个同名方法,只要它们的参数列表不同即可。方法重载使得开发者能够定义多个具有相同名称但接受不同数量或类型参数的方法。编译器根据传递给方法的参数来决定调用哪个重载方法。
方法重载的特点:
- 方法名相同:被重载的方法必须具有相同的方法名。
- 参数列表不同:可以是参数的数量不同,参数的类型不同,或者参数的顺序不同。
- 返回类型可变:重载的方法可以有不同的返回类型,但这不是重载的决定性因素。
- 访问修饰符可变:重载的方法可以有不同的访问修饰符,如public、protected、private等。
- 异常声明可变:方法可以声明抛出不同的异常,或者不抛出异常。
方法重载的解析过程:
查找方法:
- 编译器会首先在当前类中查找与方法名匹配的方法。
- 如果当前类中没有找到匹配的方法,则会继续在父类中查找。
- 如果父类中也没有找到匹配的方法,则会继续在接口中查找
参数列表匹配
- 参数数量匹配:编译器首先查找与传递的参数数量匹配的方法。
- 参数类型匹配:在参数数量匹配的方法中,编译器进一步查找参数类型匹配的方法。
- 协变返回类型:如果找到多个方法的参数类型都匹配,编译器会考虑返回类型的协变性,选择最符合的方法。
- 最近匹配:如果参数类型可以通过自动装箱或拆箱进行匹配,编译器会选择最近匹配的方法。
- 如果找不到匹配的方法,则会抛出 NoSuchMethodError 错误 。
代码示例
public class Example {
// 方法重载示例
public void display(int a) {
System.out.println("Display with int: " + a);
}
public void display(double a) {
System.out.println("Display with double: " + a);
}
public void display(String a) {
System.out.println("Display with String: " + a);
}
// 重载方法 add,接收两个 int 类型参数
public int add(int a, int b) {
return a + b;
}
// 重载方法 add,接收两个 double 类型参数
public double add(double a, double b) {
return a + b;
}
// 重载方法 add,接收一个 int 类型参数和一个 double 类型参数
public double add(int a, double b) {
return a + b;
}
public static void main(String[] args) {
Example ex = new Example();
ex.display(10); // 调用 display(int a)
ex.display(10.5); // 调用 display(double a)
ex.display("Hello");// 调用 display(String a)
int sum1 = ex.add(2, 3); // 调用第一个 add 方法
double sum2 = ex.add(2.5, 3.5); // 调用第二个 add 方法
double sum3 = ex.add(2, 3.5); // 调用第三个 add 方法
}
}
注意事项:
- 返回类型:仅当返回类型不同,而参数列表相同时,这不构成方法重载,因为编译器无法根据返回类型来选择方法。
- 静态与非静态:静态方法和非静态方法可以互相重载。
- 私有方法:私有方法也可以被重载,但只能在定义它的类内部调用。
- 构造函数:构造函数也可以被重载,只要它们的参数列表不同。
方法重载与方法覆盖(Override)的区别:
- 方法覆盖 发生在继承体系中,子类覆盖父类的方法,必须保持相同的方法名、参数列表和返回类型。
- 方法重载 发生在同一个类中,方法名相同,但参数列表不同。
- 上一篇: JAVA之重载方法(java重载方法的特征)
- 下一篇: 请说出几个Java中实现方法重载的最佳实践?
猜你喜欢
- 2024-11-01 Java | 深入理解方法调用的本质(含重载与重写区别)
- 2024-11-01 Java中的方法重载和方法重写的区别
- 2024-11-01 经典回答:《重载和重写的区别》Java面试冲击月薪40K高薪
- 2024-11-01 java 核心技术-12版 卷Ⅰ- 4.6 对象构造 4.6.1重载
- 2024-11-01 Java语言基础图解-第二阶段(继承-重载-重写-多态-抽象-接口)
- 2024-11-01 阿瑟Java (17):重载、重写有区别吗?
- 2024-11-01 Java基础——构造器重载 & this关键字
- 2024-11-01 「Java面试题」常规Java面试题分享
- 2024-11-01 Java每日一题之重载和重写有什么区别?
- 2024-11-01 Java里方法重写override与方法重载overload有什么区别?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)