当程序不使用方法重载机制时
public class OverloadTest01 {
public static void main(String[] args) {
int result1 = sumInt(11,23);
System.out.println(result1);
long result2 = sumLong(12343,2325);
System.out.println(result2);
double result3 = sumDouble(12.3,12.8);
System.out.println(result3);
}
//定义一个计算int类型的求和方法,
public static int sumInt(int a,int b){
return a + b;
}
//定义一个long类型的数据的求和方法
public static long sumLong(long a,long b){
return a + b;
}
//定义一个double类型的数据的求和方法
public static double sumDouble(double a,double b){
return a + b;
}
}
以上程序没有语法错误,运行也是正常的,但是代码风格上存在什么缺点?
sumInt,sumLong,sumDouble,不是功能“相同”,而是功能“相似”;
缺点包括两个:
第一个:代码不美观(次要的)、
第二的:程序员需要记更多的方法名称。
使用方法重载机制解决之前的矛盾`
public class OverloadTest02 {
public static void main(String[] args) {
System.out.println(sum(10,20));
System.out.println(sum(1253253,315321));
System.out.println(sum(19.4,12.23));
}
public static int sum(int m, int n) {
return m + n;
}
public static long sum(long m, long n) {
return m + n;
}
public static double sum(double m, double n) {
return m + n;
}
}
优点1:代码整齐美观。
优点2:功能相似的,可以让方法名相同,更容易以后的代码编写
在java语言中怎么进行方法区分呢?
首先的java编译器会通过方法名进行区分,但是在java中允许方法名相同的情况存在,那在方法名相同的情况下,编译器会通过方法的参数类型进行方法的区分
总结
什么时候使用方法重载?
在同一个类中,如果“功能1” 和“功能2”的功能相似,就可以考虑考虑方法重载机制,使他们的方法名一致,这样代码就可以更加美观,又便于后期的代码编写。
什么时候会发生代码重载?
条件1: 在同一个类中。不在同一个类中,方法是不同的,也不可能发生重载
条件2:方法名相同。
条件3:参数列表不同,参数不同有分为3种:
-①参数个数不同:
public static int sum(int m, int n) {
return m + n;
}
public static int sum(int m, int n,int l) {
return m + n +l;
}
-②参数类型不同
public static int sum(int m, int n) {
return m + n;
}
public static double sum(double m, double n) {
return m + n;
}
-③参数顺序不同
public static double sum(double m, int n) {
return m + n;
}
public static double sum(int m, double n) {
return m + n;
}
但是需要注意的是方法重载和方法的返回值类型无关
编译器提示方法已经重复了
private static int sum(int m, int n) {
return m + n;
}
上面求和的方法返回值是int 但是在我们调用该方法的时候,可以采用无返回值的方式来进行方法的调用,并没有创建新的变量来接收该方法的返回值。
如下代码:
public static void main(String[] args) {
sum(12,4);//无返回值的调用
int result = sum(12,4);//将方法的我返回值出传入result
}
private static int sum(int m, int n) {
return m + n;
}
无返回值的调用就相当于该方法有返回值,但是执行该方法并没有接收该返回值,从根本意义上来讲, 方法的返回值类型不相同,不会发生方法的覆盖,而是方法的重复。