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;
}
}
}