Java基础——重载
3.3重载
3.3.1什么是重载?
- 方法重载:指同一个类中定义有相同的方法名,但参数列表不同的多个方法,调用时根据不同的参数列表来选择调用对应的方法。
3.3.2重载的条件
(1)必须要在同一个类中;
(2)方法名相同,参数列表中的参数个数、顺序或类型不同;
(3)与方法名的修饰符或返回值没有关系。
附加知识:在jvm中确定一个方法的方式是:返回值类型+方法名称+参数列表。java编程规范确定一个方法是:返回值+参数列表。
3.3.3重载的案例
package com.pxcoder.myproject1;
public class Demo07 {
public static void main(String[] args) {
max(10,20);//調用第一個方法
max(10.0,20.0);//調用第二個方法
}
public static void max(int a,int b) {
System.out.println(a>b?a:b);
}
public static void max(double c,double d) {
System.out.println(c<d?c:d);
}
}
public class Method08{
public static void main(String[] args){
add(1,2);}
//计算10和20的和
public static void add(){
int num1=10;
int num2=20;
System.out.println(num1+num2);
}
//计算传入的两个参数的和
public static void add(int num1,int num2){
System.out.println(num1+num2);
}
public static void add(int num1){ System.out.println(num1+20);
}
public static void add(int num1,byte num2){
System.out.println(num1+num2);
}
public static void add(byte num1,int num2){
System.out.println(num1+num2);
}
}
- 参数列表注意事项:
- 在方法声明中的参数列表称之为形式参数,也叫形参
- 参数列表中可以声明0个或者是多个不同类型的参数,用逗号隔开
- 对于调用者而言,调用时,通过方法名传入的具体的参数的值称之为实际参数,也叫实参
- 方法声明的参数列表中变量只存在声明不需要初始化就可以使用,原因是由于该方法被调用之后,一定用实际参数进行赋值,赋值给形式参数。
- 方法调用者而言。在调用方法时不能只看方法名称,而且还需要查看方法的参数列表,只有这样才可以正确调用到需要被调用的方法。
- 参数列表中的参数个数、顺序或类型不同,都會改變所调用的方法
3.3.4重载的问题(重载的陷阱)
public class Test01{
public static void main(String[] args){
char ch='A';
int num=10;
fun(ch,num);
}
//最佳方法1:
public static void fun(char n,int m){
System.out.println("Test01.fun(char,int)");
}
//自动提升:
public static void fun(int n,int m){
System.out.println("Test01.fun(int,int)");
}
public static void fun(long n,int m){
System.out.println("Test01.fun(long,int)");
}
public static void fun(int n,float m){
System.out.println("Test01.fun(int,float)");
}
}
-
执行方法调用的顺序:执行方法调用时,一定要注意方法调用的原则是
<最近最优原则>
。先找一个完全能够匹配的被调用方法,如果不存在这个方法,则实际参数的数据类型会做自动提升,以期望可以找到一个最优的方法。 -
自动提升的方式和数据类型的自动提升方式一致:
- byte–>short–>int–>long–>float–>double
- char–>int—>long–>float–>double
-
切记不要让程序存在二义性,假设不存在一个完全匹配的,也就是说如果当前类中存在多个可以被调用的方法时,那么程序一定会报错。