在之前的文章中我们介绍了一下 java 中的对象和类,接下来我们来看一下 Java 中的方法重载。

在显示生活中,我们肯定会遇到这样一个问题,那就是我们再商场买东西的时候在付账时的选择。如下

A:在收银台处设三个窗口,分别满足现金,手机,刷卡三种形式的付款。

B:可以设置一个窗口,这个窗口满足以上三种付款方式。

对于消费者和商场而言,B 方案无疑比 A 方案更好,商场可以减少雇佣员工和占地,消费者不必去刻意选择支付方式。

在代码的世界里,以上三种支付方式其实都是程序的运行,我们可以将上面的支付方式写成一个 pay( ) 方法,

但是如果我们根据类型来区分支付方法,比如 payByMoney( ),payByPhone( ),payByCard( ),要是再有其他的支付方式我们还需要增加其他方法,比如还可以使用支票付款,手机付款又可以分为支付宝,微信,云闪付等等,那么对于代码的维护性和扩展性看来说很不友好,于是乎我们就可以利用重载来解决上面的问题。

Java 重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

最常用的地方就是构造器的重载。

重载规则:

  • 被重载的方法必须改变参数列表(参数个数或类型不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。
1 public class HelloWorld {
 2     public static void main(String[] args) {
 3         Aoo aoo = new Aoo(); // 创建一个 Aoo 对象
 4         aoo.foo(); // foo 无参
 5         aoo.foo(123); // foo 整型参数123
 6         aoo.foo("abc"); // foo 字符串参数zhangsan
 7         aoo.foo("abc",123); // foo 字符串+整型参数abc123
 8         aoo.foo(123,"abc"); // foo foo 整型+字符串参数123abc
 9     }
10 }
11 
12 class Aoo {
13     void foo() {
14         System.out.println("foo 无参");
15     }
16 
17     void foo(int num) {
18         System.out.println("foo 整型参数" + num);
19     }
20 
21     void foo(String str) {
22         System.out.println("foo 字符串参数" + str);
23     }
24 
25     void foo(String str, int num) {
26         System.out.println("foo 字符串+整型参数" + str + num);
27     }
28 
29     void foo(int num, String str) {
30         System.out.println("foo 整型+字符串参数" + num + str);
31     }
32 }


在上面的代码中,我们定义了一个 Aoo 的类,在 Aoo 类里有一个 foo( ) 方法,我们通过向 foo( ) 内传入不同的参数,在调用时传入不同的蚕食,编译器会自动根据其参数的不同,绑定到不同的方法。这样我们就可以解决上面的支付问题,向 pay( ) 方法中传入不同的参数来判断不同的支付方式,当然支付是一个比较复杂的方法,这里就不做演示了。