Java中允许同一个类中,多个同名方法的存在,但要求形参列表不一致。
重载的好处:减轻了起名的麻烦和记名的麻烦。
案例演示:
public class OverLoad {
public static void main(String[] args) {
MyCalculator mc = new MyCalculator();
System.out.println(mc.calculate(1, 2));
System.out.println(mc.calculate(1, 1.1));
System.out.println(mc.calculate(1.1, 1));
System.out.println(mc.calculate(1, 1, 3));
}
}
class MyCalculator {
//下面的四个calculate方法构成了重载
//两个整数的和
public int calculate(int n1, int n2) {
System.out.println("calculate(int n1, int n2)被调用");
return n1 + n2;
}
//一个整数,一个double的和
public double calculate(int n1, double n2) {
System.out.println("calculate(int n1, double n2)被调用");
return n1 + n2;
}
//一个double 一个整数的和
public double calculate(double n1, int n2) {
System.out.println("calculate(double n1, int n2)被调用");
return n1 + n2;
}
//三个int的和
public int calculate(int n1, int n2, int n3) {
System.out.println("calculate(int n1, int n2, int n3)被调用");
return n1 + n2 + n3;
}
}
1、方法名必须相同
2、形参列表必须不同(形参类型或个数或顺序,至少有一样不同,参数名无要求)
3、返回类型无要求
1、编写程序,类Methods中定义三个重载方法并调用。方法名为m。三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。在主类的main )方法中分别用参数区别调用三个方法。
public class OverLoadExercise {
public static void main(String[] args) {
Methodes me = new Methodes();
me.M(10);//调用计算平方的方法
me.M(20, 15);//调用计算两数相乘的方法
me.M("Hello");//调用打印字符串的方法
}
}
class Methodes {
//平方运算
public int M(int n1) {
System.out.println("平方=" + (n1 * n1));
}
//相乘
public int M(int n1, int n2) {
System.out.println("相乘=" + (n1 * n2));
}
//输出字符串信息
public String M(String a) {
System.out.println("字符串=" + a);
}
}
2、在Method类,定义三个重载方法max(),第一个万法,返回两个Int中的最大值,第二个方法,返回两个double值中的最大值,第三个方法,返回三个double值中的最大值,并分别调用三个方法。
public class OverLoadExercise01 {
public static void main(String[] args) {
Methodes me = new Methodes();
System.out.println("两个int最大值=" + me.Max(1, 5));
System.out.println("两个double最大值=" + me.Max(2.1, 3.1));
System.out.println("三个double最大值=" + me.Max(4.5, 4.2, 4.6));
}
}
class Methodes {
//返回两个int值中最大的值
public int Max(int n1,int n2) {
return n1 > n2 ? n1 : n2;
}
//返回两个double值中最大的值
public double Max(double n1, double n2) {
return n1 > n2 ? n1 : n2;
}
//返回三个double值中最大的值
public double Max(double n1, double n2, double n3) {
double max1 = n1 > n2 ? n1 : n2;
return max1 > n3 ? max1 : n3;
}
}