Java方法的重载
重载就是在一个类中,有相同的函数(方法)名称,但形参不同的函数(方法)。
方法的重载的规则:
- 方法名必须相同
- 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。
- 方法的返回类型可以相同也可以不同
- 仅仅返回类型不同不足以成为方法的重载
实现理论:
- 方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
重载的意义:
- 是为了方便外界对方法进行调用,什么样的参数程序都可以找到对应的方法来执行,体现的是程序的灵活性
如下代码块,max方法比较大小只能是两个lnt类型相比较,那么我们如何让max方法可以比较两个double类型的数,甚至比较一个int类型的数,和一个double类型的数呢?这里就需要使用方法的重载。
package cn.test;
/*
* 本类用于测试重载01
*/
public class TestHeavyLoad {
public static void main(String[] args) {
int max = max(15,35);
System.out.println(max);//35
}
//两个int类型相比较
public static int max(int a,int b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return a;
}else {
return b;
}
}
}
实现效果如下(两个数,不同类型):
package cn.test;
/*
* 本类用于测试重载02
*/
public class TestHeavyLoad {
public static void main(String[] args) {
// int max = max(15,35);//35
// double max = max(15.5,35.5);//35.5
// double max = max(35,15.5);//35.0
double max = max(35.8,15);//35.8
System.out.println(max);
}
//两个int类型相比较
public static int max(int a,int b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return a;
}else {
return b;
}
}
//两个double类型相比较
public static double max(double a,double b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return a;
}else {
return b;
}
}
//第一个为int类型,第二个为double类型
public static double max(int a,double b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return a;
}else {
return b;
}
}
//第一个数为double类型,第二个数为int类型
public static double max(double a,int b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return a;
}else {
return b;
}
}
}
package cn.test;
/*
* 本类用于测试重载03
*/
public class TestHeavyLoad {
public static void main(String[] args) {
// int max = max(15,35);//35
int max = max(35,66,18);//66
System.out.println(max);
}
//两个int类型相比较
public static int max(int a,int b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return a;
}else {
return b;
}
}
//比较三个数,取最大值
public static int max(int a,int b,int c) {
//定义一个result变量来接受最大值,局部变量要声明初始值。
int result = 0;
result = a;
if(result == b) {
if(result == c) {
System.out.println("三个数都相等!");
return 0;
}else if(result > c) {
return result;
}else {
return c;
}
}else if(result > b) {
if(result > c) {
return result;
}else {
return c;
}
}else {
if(b > c) {
return b;
}else {
return c;
}
}
}
}
package cn.test;
/*
* 本类用于测试重载04
*/
public class TestHeavyLoad {
public static void main(String[] args) {
// int max = max(15,35);//35
int max = max(18.6,32.3);//32
System.out.println(max);
}
//两个int类型相比较
public static int max(int a,int b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return a;
}else {
return b;
}
}
//两个double类型相比较,返回值为int类型
public static int max(double a,double b) {
if(a == b) {
System.out.println("两值相等");
return 0;
}else if(a > b) {
return (int)a;
}else {
return (int)b;
}
}
}