標籤:字串 public ati 整數 sts 關於 logs 方便 tail
什麼是方法重載?
方法重載的要求是兩同一不同:同一類中方法名相同,參數列表不同。至於方法的其他部分,如方法傳回值類型、修飾符等,與方法重載沒有任何關係。
為什麼要用方法重載?
重載的目的是方便程式員調用方法。比如,System.out.println()這個函數是用來輸出的,當輸出的是整數時是用這個方法,當輸出一個字串時還是用這個方法。根據傳入參數的不同,自動找到匹配的方法。
方法重載是編譯時間多態,在編譯時間確定方法簽名。
1 import java.util.ArrayList; 2 import java.util.LinkedList; 3 import java.util.List; 4 import java.util.concurrent.CopyOnWriteArrayList; 5 6 public class TestOverLoadMethod { 7 8 public void testOverLoad(ArrayList<String> arrayList){ 9 System.out.println("ArrayList");10 }11 12 public void testOverLoad(LinkedList<String> linkedList){13 System.out.println("LinkedList");14 }15 16 public void testOverLoad(List<String> list){17 System.out.println("list");18 }19 20 public static void main(String[] args) {21 List<List<String>> lists = new ArrayList<List<String>>();22 lists.add(new ArrayList<String>());23 lists.add(new LinkedList<String>());24 lists.add(new CopyOnWriteArrayList<String>());25 26 TestOverLoadMethod obj = new TestOverLoadMethod();27 for (List<String> list : lists) {28 obj.testOverLoad(list);29 }30 }31 32 }
結果:
1 list2 list3 list
雖然運行時才確定調用哪個方法,但是編譯時間確定方法簽名。因為編譯器看到obj.testOverLoad(list);執行時list的宣告類型是List<String>,所以這個調用產生的方法簽名是testOverLoad(List list),在運行時通過反射調用了這個方法。
參考資料
Java方法重載規則
為什麼要用到重載
關於靜態方法為什麼不能被重寫的一點思考以及overload的一些坑。
Java 方法重載