对于初学者来说,下面的代码一定十分的熟悉。
public class Test {
public static void main(String[] args) {
int a = 1;
double b = 1.2;
char c = 'C';
boolean d = true;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
}
}
输出结果显而易见
从中我们不难思考一个问题,
a,b,c,d 为四个不同类型的参数,为什么 System.out.println(参数)都能输出呢?
查阅 jdk 的文档可以看出,println()有多种重载的方法
这就省去了我们的许多麻烦,一个方法名只要放入的参数不同,即可输出不同的结果。
方法重载就是方法名称重复,加载参数不同。
1. 方法名必须相同
2. 参数列表:必须不同。(参数的类型,个数,顺序,至少有一样不同,参数名无强制要求)
3. 返回类型:无要求。(可相同,可不同)
首先,关于第一点
1. 方法名必须相同
public class Test {
//方法名都为Sum
//一个是求两数之和,一个是求三数字和
public int Sum(int x, int y) {
return x + y;
}
public int Sum(int x, int y, int z) {
return x + y + z;
}
public static void main(String[] args) {
Test test = new Test();
int sum1 = test.Sum(1,2);//两数之和
int sum2 = test.Sum(1,2,3);//三数之和
System.out.println(sum1);//3
System.out.println(sum2);//6
}
}
其次,针对第二点
2. 参数列表:必须不同。(参数的类型,个数,顺序,至少有一样不同,参数名无强制要求)
参数的类型不同
public class Test {
//类型为int 和 int
public double Sum(int x, int y) {
return x + y;
}
//类型为int 和 double
public double Sum(int x, double y) {
return x + y;
}
//方法名相同,类型不同,构成重载
public static void main(String[] args) {
Test test = new Test();
double sum1 = test.Sum(1,2);//int int
double sum2 = test.Sum(1,2.1);//int double
System.out.println(sum1);//3.0
System.out.println(sum2);//3.1
}
}
参数的个数
public class Test {
//参数个数为 int int 两个
public int Sum(int x, int y) {
return x + y;
}
//参数为int int int 三个
public int Sum(int x, int y, int z) {
return x + y + z;
}
//方法名相同,个数不同构成重载
public static void main(String[] args) {
Test test = new Test();
int sum1 = test.Sum(1,2);//两数之和
int sum2 = test.Sum(1,2,3);//三数之和
System.out.println(sum1);//3
System.out.println(sum2);//6
}
}
参数的顺序
public class Test {
//类型为double int
public double Sum(double x, int y) {
return x + y;
}
//类型为int double
public double Sum(int x, double y) {
return x + y;
}
//方法名相同,参数顺序不同,构成重载
public static void main(String[] args) {
Test test = new Test();
double sum1 = test.Sum(1.3,2);//double int
double sum2 = test.Sum(1,2.1);//int double
System.out.println(sum1);//3.3
System.out.println(sum2);//3.1
}
}
最后,第三点
3. 返回类型:无要求。(可相同,可不同)
编译器并不能根据返回类型的不同,来判断这两个方法是否是重载,必须有前两点中的任意一点。
void A(int a, char b, double c) {}
以下与A 构成重载的是?
//不必考虑返回类型
//参数类型相同
//int char double
//int char double
void A(int x, char y, double z) {}//不是
//参数类型不同
//int [char] [double]
//int [double] [char]
int A(int a, double c, char b) {}//是
//参数类型不同
//int [char] [double]
//int [double] [char]
void A(int a, double c, char b) {}//是
//参数类型不同和个数不同
//int char [double]
//int [char] [?]
boolean A(int c, char b) {}//是
//参数类型不同和个数不同
//[int] [char] [double]
//[double] [?] [?]
void A(double c) {}//是
//参数类型想同
//int char double
//int char double
double A(int x, char y, double z) {}/不是
//方法名不同 A AA
void AA() {}//不是
梦想永在凌云意,意气风发。 代码筑就万世基,积沙镇海。
诸君加油(ง •_•)ง