5.2.5 方法重载

5.2.5 方法重载

Java允许同一个类里定义多个同名方法,只要形参列表不同就行。

方法重载定义

如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。

Java程序如何确定要调用哪个方法

Java程序中确定一个方法需要如下三个要素。

  1. 调用者,也就是方法的所属者,既可以是类,也可以是对象。
  2. 方法名,方法的标识
  3. 形参列表,当调用方法时,系统将会根据传入的实参列表匹配

方法重载的要求

方法重载的要求就是两同一不同:

  • 同一个类中
  • 方法名相同,
  • 参数列表不同。

至于方法的其他部分,如方法返回值类型修饰符等,与方法重载没有任何关系。

为什么返回值类型不能区别重载

Java调用方法时可以直接调用方法,没有变量类接收返回值,此时无法判断该调用哪个方法。

1
2
3
// 有int fun()方法和void fun()方法
int result=fun(); // 可以根据返回值判断调用的是int fun()方法
fun(); // 没有变量接收返回值,无法判断调用的是哪个fun方法

重载的方法有变参的情况

此时优先调用没有变参的方法,只有参数个数超过非变参方法的参数长度才会调用变参方法.
不推荐重载形参个数可变的方法,因为变参可以匹配一个或者多个参数,自然也就包含了非变参方法的功能了。

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class OverloadVarargs {
public void test(String msg) {
System.out.println("调用 一个参数 的方法");
}

public void test(String... books) {
System.out.println("调用 可变参数 的方法");
}

public static void main(String[] args) {
OverloadVarargs olv = new OverloadVarargs();
// 0个参数,执行变参方法
olv.test();
// 2个参数,执行变参方法
olv.test("aa", "bb");
// 1个参数,执行变参方法
olv.test("aa");
// 数组参数,执行变参方法
olv.test(new String[] { "aa" });
}
}

运行结果

1
2
3
4
调用 可变参数 的方法
调用 可变参数 的方法
调用 一个参数 的方法
调用 可变参数 的方法