標籤:public 根據 簡單的 tps 一個 static 就是 直接 名稱
深入java函數重載
先思考幾個問題:
有這個一個重載的函數:
public static void chongZai1(ArrayList list){ System.out.println("ArrayList ");}public static void chongZai1(AbstractList list){ System.out.println("AbstractList ");}public static void chongZai1(List list){ System.out.println("List ");}
1.
public static void main(String[] args) { List list = new ArrayList(); chongZai1(list); ArrayList arrayList = new ArrayList(); chongZai1(arrayList);}
會如何輸出?
輸出 :
List
ArrayList
概念:
函數或者方法有同樣的名稱,但是參數列表不相同的情形,這樣的同名不同參數的函數或者方法之間,互相稱之為重載函數或者方法。
- 函數的重載是一個編譯期概念。
- 編譯時間根據參數變數的類型判斷應該調用哪個方法。
簡單的理解就是
List list = new ArrayList(); chongZai1(list);
直接去找 參數為List類型的函數
ArrayList arrayList = new ArrayList(); chongZai1(arrayList);
先去找參數類型為 ArrayList 的方法 沒有就去找參數為ArrayList父類的函數 最後才是找參數為Arraylist實現的介面的函數。
如果是這樣重載的函數:
public static void chongZai1(AbstractList list){ System.out.println("AbstractList ");}public static void chongZai1(AbstractCollection list){ System.out.println("AbstractList ");}public static void chongZai1(List list){ System.out.println("List ");}public static void chongZai1(Serializable list){ System.out.println("List ");} public static void main(String[] args) { ArrayList arrayList = new ArrayList(); chongZai1(arrayList);} 這樣編譯期就會拋錯! 因為它不知道該去掉哪個方法 這些都是父的父類或者實現的介面 集體規則 參考:[https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5](https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.12.2.5)
深入java函數重載