Java中支持方法名相同,但是方法參數不同而自動去選擇執行哪一個方法,如print(int i)和print(String str),雖然方法名相同,但是參數不同。象這里的int和String 參數差異比較大所以看起來這種重載沒什么差別,但是如果是類型差別不大, 會出現什么情況呢?
看下面的代碼:
public void f(float i){
System.out.println("float");
}
public viod f(double i){
System.out.println("double");
}
那么執行 f(5)會輸出什么呢?5是被認為是float類型還是double類型還是會報錯呢?執行結果是 float 。原來在這種情況下,該數據類型能被轉為一個較大的數據類型,比5較大的數據類型是float,其次才到double,所以輸出結果是float。還有一個特殊的情況就是如果輸入類型為char,如這里我們執行f('a'),
不要以為這會出錯,其實是不會出錯的,因為如果沒有發現一個準確的char于它匹配,那么它就把這個char轉換成int類型,如果沒有int類型和它匹配,在去尋找較大的數據類型,這里它找到了float,所以這里執行flaot('a')輸出的還是 float。
下面再討論另外一種情況,譬如說下面這種情況:
定義了下面一個方法:
public void f(int i){
System.out.println("int ");
}
如果執行f(100.99)會不會在這種數據類型大于這種重載方法期待的變量時會怎么處理呢?會不會把這種較大的數據類型縮小到期待的數據類型?編譯一下,很遺憾出錯了,在這種情況下是出錯的。
這么快就12點半了,睡覺了~~~不然明天早晨爬不起來了。