方法重载是允许方法名相同,简化起名过多过杂的问题,也是一种重复利用的思想。也可以理解为“”一词多义“”举一个例子:
假设现在我们想计算两个整数的求和,我需要写一个sum()方法。
那么我增加需求想计算三个整数求和,我需要起另外一个名字比如sum_three()方法。
这还算好起名的。那么再假设现在我需要计算两个double类型的数求和,我不知道起什么名字了。可能想个名字或者找资料花一比时间,而且可阅读性可能会很差。那么Java提供了一种机制叫方法重载,与c++中的方法重载是一个思想的。
方法重载就是允许函数名相同,但是可以根据参数的个数不同,顺序不同,类型不同,来完成对应的工作,代码如图:
public static int sum(int a,int b){
return a+b ;
}
public static int sum(int a,int b,int c){
reutrn a+b+c;
}
public static double sum(double a,double b){
return a+b;
}
我们根据我们的假设写出了方法重载后的代码。可以看到方法名都一样但是通过传参的个数和类型不同会实现对应的功能,这对开发来说是一种很方便的操作。有以下几点我们需要注意:
1,发生方法重载方法名必须相同。
2,方法的参数列表不同(顺序,个数,类型)。
3,和返回值没有关系可以一样也可以不一样。
那么编译器是如何识别方法重载的呢?其实很简单,对于相同的方法名,编译器其实内部是有一套命名的,但是对我们程序员来说是透明的,我们无法看到但是我们能使用相同的方法名,比如:
sum(int a,int b)和sum(double a,double b)编译器就可能在背后给它起名为sumii和sumdd来区别方法,我这里只是举个例子方便理解,真是编译器起名规则并不是这样的,但是大致的思想是一样的。但是如果两个方法名相同方法的参数顺序和个数以及类型都相同,编译器就无法区分调用哪个方法,因此编译器会报错来提示这种语法规范是错误的。因此发生方法重载一定是基于上述三点注意事项。