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