第十八章 方法重载
作者:张子默
一、方法重载
方法重载是指在同一个类中允许存在一个以上的同名方法,只要它们的参数列表不同即可,与修饰符和返回值类型无关。
-
参数列表:个数不同,数据类型不同,顺序不同
-
重载方法调用:JVM通过方法的参数列表调用不同的方法
二、实例
/*
问题:对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。
方法的重载(Overload),多个方法名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。
方法重载与下列因素相关:
1.参数个数不同
2.参数类型不同
3.参数的多类型顺序不同
方法重载与下列因素无关:
1.与参数的名称无关
2.与方法的返回值类型无关
*/
public class Demo09MethodOverload {
public static void main(String[] args) {
/*System.out.println(sumTwo(10, 20)); // 30
System.out.println(sumThree(10, 20, 30)); // 60
System.out.println(sumFour(10, 20, 30, 40)); // 100*/
System.out.println(sum(10, 20)); // 两个参数的方法
System.out.println(sum(10, 20, 30)); // 三个参数的方法
System.out.println(sum(10, 20, 40)); // 四个参数的方法
//System.out.println(sum(10, 20, 40, 50)); // 找不到任何方法来匹配,所以错误!
}
public static int sum(int a, double b) {
return (int) (a + b);
}
public static int sum(double a, int b) {
return (int) (a + b);
}
public static int sum(int a, int b) {
System.out.println("有2个参数的方法执行!");
return a + b;
}
//错误写法!与参数名称无关
/*public static int sum(int x, int y) {
return x + y;
}*/
//错误写法!与方法的返回值类型无关
/*public static double int sum(int a, int b) {
return a + b;
}*/
public static int sum(double a, double b) {
return (int) (a + b);
}
public static int sum(int a, int b, int c) {
System.out.println("有3个参数的方法执行!");
return a + b + c;
}
public static int sum(int a, int b, int c, int d) {
System.out.println("有4个参数的方法执行!");
return a + b + c + d;
}
}
三、练习
- 比较两个数据是否相等
/*
要求:比较两个数据是否相等
参数类型分别为两个byte类型、两个short类型、两个int类型、两个long类型,并在main方法中进行测试
*/
public class Demo10MethodOverloadSame {
public static void main(String[] args) {
byte a = 10;
byte b = 20;
System.out.println(isSame(a, b));
System.out.println(isSame((short) 20, (short) 20));
System.out.println(isSame(11, 12));
System.out.println(isSame(10L, 20L));
}
public static boolean isSame(byte a, byte b) {
System.out.println("两个byte参数的方法执行!");
boolean same;
if(a == b) {
same = true;
}else {
same = false;
}
return same;
}
public static boolean isSame(short a, short b) {
System.out.println("两个short参数的方法执行!");
boolean same = a==b?true:false;
return same;
}
public static boolean isSame(int a, int b) {
System.out.println("两个int参数的方法执行!");
return a==b;
}
public static boolean isSame(long a, long b) {
System.out.println("两个long参数的方法执行!");
if(a==b) {
return true;
}else {
return false;
}
}
}