零基础学Java第2版
上QQ阅读APP看书,第一时间看更新

8.4 重载

重载在整个Java语言设计中,有着非常重要的地位。本节将先讲述重载的概念,然后使用大量的实例,让读者更加清晰地熟悉重载,并且联系实际,将这个概念使用到现实生活中的程序开发中去,从而为以后的开发工作奠定基础。

8.4.1 什么是重载

在Java中,同一个类中的两个或两个以上的方法可以有同一个名字,只要它们的参数声明不同即可,这种方法就被称为重载(overloaded),此过程称为方法重载(method overloading)。

【实例8.14】下面看一个详细的实例。

01   class overload
02   {
03   ///一个普通的方法,不带参数
04         void test()
05         {
06              System.out.println("No parameters");
07       }
08   ///重载上面的方法,并且带了一个整型参数
09         void test(int a)
10         {
11              System.out.println("a:" + a);
12       }
13   ///重载上面的方法,并且带了两个参数
14         void test(int a,int b)
15         {
16              System.out.println("a and b:" + a + " " + b);
17       }
18   ///重载上面的方法,并且带了一个双精度参数,与上面带一个参数的重载方法不一样
19         double test(double a)
20         {
21              System.out.println("double a:" + a);
22              return a*a;
23         }
24         public static void main(String args[])
25         {
26              overload o= new overload ();
27              o.test();
28              o.test(2);
29              o.test(2,3);
30              o.test(2.0);
31       }
32   }

【代码说明】第4~23行定义了4个相同名称的test()方法,不同的是它们的参数,有没有参数的,有一个参数的,也有两个参数的,而且参数可以是不同的数据类型。第27~30行分别调用这4个方法。

【运行效果】

No parameters
a:2
a and b:2 3
double a:2.0

通过上面的实例,读者可以看出,重载就是在一个类中,有相同的函数名称,但形参不同的函数。重载的结果,可以让一个程序段,尽量减少代码和减少程序的函数种类。

8.4.2 用实例来说明重载的意义

【实例8.15】为了能让读者更加熟练运用重载方法编写程序,下面再举一个有关重载的实例。

01   public class overload1
02   {
03   ///一个输出方法
04         void print()
05         {
06              System.out.println("你好");
07       }
08   ///重载上面的输出方法,加上了参数
09         void print(String name)
10         {
11              System.out.println(name+",你好");
12       }
13   ///重载上面的输出方法,加上了两个参数
14         void print(String name,int age)
15         {
16              System.out.println(name+",你好,你有"+age+"岁了");
17       }
18         public static void main(String args[])
19         {
20              overload1 o=new overload1();
21              o.print();
22              o.print("王华");
23              o.print("王华",30);
24         }
25   }

【代码说明】第4~17行定义了3个同名称print()方法,不同的是参数个数和参数类型。第21~23行分别调用这3种方法。

【运行效果】

你好
王华,你好
王华,你好,你有30岁了

使用重载其实就是避免繁多的方法函数名,有些函数的功能是相似的,如果重新建立一个函数,重新取个函数名称,会让程序段显得比较不容易阅读。

下面总结重载的实质:

❑方法名相同

❑参数个数不同

❑参数类型不同

当访问一个重载方法时,首先编译器会通过比较参数类型与实际调用方法中使用值的类型,以选择正确的方法,若没有发现匹配的,则编译器报错。这就叫做重载分辨。