方法的重载:
当一个类中出现了 方法名相同,形参列表不同的两个或多个方法,称为的方法的重载。
关键词:(1). 方法名相同。(2). 形参列表不同
方法重载的原则:
(1)先找最匹配的
实参的个数和类型与形参的个数和类型一样的。
(2)再找能够兼容的
形参的类型可以兼容实参的类型(自动类型提升)或
形参的个数可以兼容实参的个数(可变参数)
(3)如果最匹配的没有,兼容的也没有,就编译报错
如果匹配的多个可以兼容的方法,也会编译报错
public class TestOverload {
public static void main(String[] args) {
TestOverload t = new TestOverload();
System.out.println(t.max(4, 5));
System.out.println(t.max(4.5, 5.3));
System.out.println(t.max(4,5,6));
System.out.println(t.max(4,5,6,8,9));
System.out.println("--------------------");
System.out.println(t.max(5, 2.3));// max(double a, double b) 形参double a兼容int类型的5
System.out.println("-----------------------");
// System.out.println(t.max(1.2, 2.3, 5.6, 8.5));//编译报错
/*
个数上,只有int max (int... nums)可以接收它
但是它的类型又无法接收 double > int类型,不能兼容
*/
}
//求两个整数的最大值
int max(int a, int b){
System.out.println("TestOverload.max(int a,int b)");
return a>b?a:b;
}
//求三个整数的最大值
int max(int a, int b,int c){
/*int big = a > b ? a : b;
big = big > c ? big : c;
return big;*/
/* int big = max(a,b);
big = max(big, c);
return big;*/
System.out.println("TestOverload.max(int a,int b, int c)");
return max(max(a,b),c);
}
//求两个小数的最大值
double max(double a, double b){
System.out.println("TestOverload.max(double a, double b)");
return a > b ? a : b;
}
//求n个整数最大值
int max (int... nums){
System.out.println("TestOverload.max(int... nums)");
int max = nums[0];
for (int i = 1; i < nums.length; i++) {
max = max(max, nums[i]);
}
return max;
}