重载(重新载选方法):
java允许在一个类中,存在多个方法拥有相同的名字,但在名字相同的同时,必须有不同的参数,这就是重载,编译器会根据实际情况挑选出正确的方法,如果编译器找不到匹配的参数或者找出多个可能的匹配就会产生编译时错误,这个过程被称为重载的解析。
重载包括:普通方法的重载和构造方法的重载
方法:即函数(文中我们统称之为“方法”),是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能。而且,同时还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值传入子程序,供计算机处理;所谓出口,就是指函数的返回值,在程序段执行之后,由此返回值将值传回给调用它的程序。
通常地,一个类可以有多个重载方法,可根据不同的需求来设计类中不同的重载方法。其中,参数个数,类型,甚至不同类型参数的顺序等的的不同均为对同一个方法的不同重载。比如,如图,我们经常见到的String类就是一个及其典型的例子。
P.S.此例也在纠正本人在上次分享经验时候犯下的一个可笑错误。再次查看标题,表示无误,是重载,没有写成重写。
方法/步骤
首先,我们先写一个完整的例子。这是一个最原始的方法,如图。以后各个步骤我们陆续进行学习,逐层深入地重载这个方法。
1、开始呢,我们讨论一下访问修饰符对今天讨论内容是否有影响,答案是,访问权限修饰符对方法的重载不影响。也即,它们不是构成不同方法的必要条件。通俗点讲,方法的不同和访问修饰符是否一致没有任何关系。如图,如果访问修饰符不一致,而参数相同(或者都没有参数)的话,java默认其都为同一种方法,因此编译无法通过,报错。
2、排除了访问修饰符之后,接下来我们讨论一下返回值的不同是否可以是重载的另一种方式,此处,我们就简单地举三个例子,即,返回值为空,返回值为int型二个方法,最后证明,返回值也不是构成重载方法的必要条件,如图:
3、接下来唯一可以区别的就是参数了。我们分情况来练习。第一种,不同的参数,没错,不同的参数一定就是不同的方法了,我们可以再试一试,如图:
4、第3步骤我们说的是不同的参数,并不是对参数的命名的不同,而是指参数类型的不同,我们写出来让事实证明一下。如图,参数类型相同,都为整数类型,但是形参的命名不同,编译无法通过。
5、还有呢,因参数个数不同而造成的重载。我们可以再写个例子,1个无参方法,1个int参数方法,两个int参数方法,如图:
6、到了此时,我们到了重点环节。请问,还有没有其他类型的不同的重载呢?有的!想象一下,参数种类不同,个数相同,有什么办法是之变得不一样吗?对的!妳猜对了!是顺序不同!顺序不同的情况下,依旧是不同的方法,这也就实现重载了。如图:
再给大家一个的简单示例
1
2
3
4
5
6
7
8
9
10
11
12
|
int sum( int m, int n){
return m + n;
}
int sum( int m, int n, int k){
return m+n+k;
}
double sum( double m, double n){
return m + n;
}
double sum( double m, double n, double k){
return m+n+k;
}
|
主要实现的是重载方法sum,具有如下语义:
sum(m,n):求整数m和n之和,
sum(m,n,k):求整数m、n和k之和,
sum(m,n):求实数m和n之和,
sum(m,n,k):求实数m、n和k之和。
最后,我们总结一下,重载关心的只是参数,有参无参,参数类型不同,参数数量不同,不同类型的参数顺序不同,都可以实现方法的重载。