今天在項目裡做事,中午休息時間,補上這個教程吧。這次我們看看Overload 的內容 。
測試代碼
package lession10;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* 老紫竹JAVA基礎培訓(10),方法的Overload介紹.<br>
* 匹配方式為最特殊匹配,或者叫最准確匹配<br>
* 如果發現多個都有相同的匹配度,則編譯報錯。
*
* @author 老紫竹 JAVA世紀網(java2000.net)
*
*/
public class Lession10 {
public void test1(byte id) {
System.out.println("test1(byte);");
}
public void test1(short id) {
System.out.println("test1(short);");
}
public void test1(int id) {
System.out.println("test1(int);");
}
public void test1(long id) {
System.out.println("test1(long);");
}
public void test1(float id) {
System.out.println("test1(float);");
}
public void test1(double id) {
System.out.println("test1(double);");
}
public void test2(Object o) {
System.out.println("test2(Object);");
}
public void test2(String o) {
System.out.println("test2(String);");
}
public void test2(Integer o) {
System.out.println("test2(Integer);");
}
public void test2(List o) {
System.out.println("test2(List);");
}
public void test2(ArrayList o) {
System.out.println("test2(ArrayList);");
}
public void test3(int a, float b) {
System.out.println("test3(int,float);");
}
public void test3(long a, double b) {
System.out.println("test3(long,double);");
}
public static void main(String[] args) {
Lession10 o = new Lession10();
o.test1(1); // 整數默認為 int
o.test1((byte) 1); // 強制調用 byte
o.test1((short) 1); // 強制調用 short
o.test1(1L); // long
o.test1(1.0); // 小數默認為 double
o.test1(1.0F); // 強制調用float
//
o.test2(new Object()); // 對象類型
o.test2("String"); // 字符串比對象更准確
o.test2(new Integer(3)); // 整數對象
o.test2(3); // JDK 5及以上
o.test2(new LinkedList()); // 調用更匹配的List
o.test2(new ArrayList()); // 調用 ArrayList
//
// 強制轉換測試
o.test2((Object) new ArrayList()); // 以強制後的類型進行屁屁額
o.test2((List) new ArrayList());// 以強制後的類型進行屁屁額
// 多參數測試
o.test3(1, 2);
o.test3(1L, 3);
o.test3(1, 3D); // 自動升級優先,int可以自動升級到long,float可以自動升級到 double
//
// o.test2(null); // 不能確定匹配度的測試
}
}
寫一下運行結果大家參考
test1(int);
test1(byte);
test1(short);
test1(long);
test1(double);
test1(float);
test2(Object);
test2(String);
test2(Integer);
test2(String);
test2(List);
test2(ArrayList);
test2(Object);
test2(List);
test3(int,float);
test3(long,double);
test3(long,double);
測試:
1 其中最後一個帶有注釋,大家可以去掉注釋看看編譯效果,熟悉一些這個錯誤。
2 數字是最容易混淆的,大家可以用各種數字混合看看, 整數可以轉化為對應精度的 浮點數
3 增加更多的參數類型,一般不超過5個,測試各種組合的系統匹配情況,加深印象。
總結:
1 以最貼切,最准確的匹配進行調用
2 如果沒有完全匹配的,則進行允許的不丟失精度的類型轉換,int可以升級為 long,float可以升級為double, 整數可以升級為浮點數
3 如果還沒有匹配的,則報錯
4 如果發現有多個匹配的,無法確定到底是哪一個,則編譯報錯