欢迎来到【开开心心学java,快快乐乐写代码】此专栏,上一篇博客讲了关于方法的概念、使用以及怎样去自定义一个方法,今天就在它的基础上,来深入讲解一下关于方法重载,依旧还是讲的很详细哦~
目录
1、什么是方法重载
这里采用一下百度上的官方语言,嘿嘿~
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。 调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。 方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。
什么样,看了定义之后是不是还是很模糊,别着急,接下来我将用通俗易懂的语言来阐述,保证包教包会~
在自然语言中,一个词语可能有多种含义,这种情况下,我们就说这个词语被重载了,具体代表什么含义要根据具体情况来决定。比如:在自然语言中,“宝贝”这个词在不同的情况下有不同的含义,就像:
那java语言也是一样的,方法名相同的方法,可能也会有不同作用。
在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。
比如以下代码
public class Test { public static void main(String[] args) { int a = 0; double b = 0.0; double c=0.0; a = add(1, 2); b = add(1.5, 4.3); c=add(1.2,5.2,6.0);//这三个的方法名都是add,但是其返回值类型和参数列表都不完全形同 System.out.println(a); System.out.println(b); System.out.println(c); } public static int add(int x,int y){ return x+y; } public static double add(double x,double y){ return x+y; } public static double add(double x,double y,double z){ return x+y+z; } }
在这段代码中,我们不难发现主函数里面调用了3个方法名相同的方法,但是这三个方法的参数列表、返回值都不完全相同,那在这种情况下,我们就说add方法发生了重载。编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法。
2、方法重载的判断
(1)方法名必须完全相同
(2)方法的参数列表不同
(即包括参数的个数不同,参数的类型不同,参数的不同类型的次序不同)
注意:返回值的类型不做要求
//两个方法如果仅仅是因为返回值类型不同,是不能构成重载的,而且还会报错 public class Test{ public static void main(String[] args) { int a = 10; int b = 20; int ret = add(a, b); System.out.println("ret = " + ret); } public static int add(int x, int y) { return x + y; } public static double add(int x, int y) { return x + y; } } //编译报错
3、方法签名
同一个作用域中不能定义两个相同名称的标识符,比如:在一个方法体内不能定义两个相同的变量名。那为什么类中就可以定义方法名相同的方法呢?
方法签名:经过编译器编译修改确定后的方法的方法名。格式:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
4、为什么要有方法重载
在平常写代码的过程中,有时发现我们要实现的功能有好多都类似,比如上述代码中实现几个数的相加。如果不用方法重载,我们则需要对每一种方法都起一个不同的名字。如果是在一些大型项目中,有很多方法都相似,本来取名字就很困难,再如果每一个方法都有不同的方法名,用起来又要想半天,将会对程序员造成很大的困扰。而将有类似功能(如实现几个数的加法、减法等)的方法的方法名设置成相同时,在用的时候会减轻很多负担,同时也能见名知意。