物件的執行時型別並不影響「哪個過載版本將被執行」;選擇工作是在編譯時候進行的,完全基於引數的編譯時型別。
看個例子先:
package com.wjy.multithread;public
class
maintest
public
static
void show(double
a)
public
static
void
show(object a)
public
static
void
main(string args);
for(object object
: arr)
}}
objectobject
object
對,你沒看錯,輸出了三遍object.神馬情況? 你可能認為show方法會自動識別元素型別,呼叫合適的過載方法。但實際上卻不是,編譯的時候決定的型別會發揮作用,無論執行時是什麼型別都無所謂,編譯時已經定了。無語吧。方法的過載機制是不完美的。他並沒有提供這一功能。
但是來看看類之間的覆蓋例子:
package com.wjy.multithread;public
class
grandfather
}
package com.wjy.multithread;public
class
father extends grandfather
}
package com.wjy.multithread;public
class
son extends father
}
測試**:
package com.wjy.multithread;public
class
maintest ;
for(grandfather grandfather : arr2)
}}
正如你所料,結果是:
grandfatherfather
son
這才是我們想要的答案,可見方法過載機制並沒有覆蓋機制的這些優勢。所以,慎用過載。
慎用for迴圈
1.for迴圈會在迴圈以外的scope建立乙個區域性變數,看下面 for i in 1,2,3 do p iend 123 p i 3這和each是有區別的,each只是會改變scope外面已存在的區域性變數 1,2,3 each do i print i endp i undefined loca...
慎用url重寫
為了使 url位址更加友好 當然可能有別的原因 很多站點使用了 url重寫,如http www.cnblogs.com life,在asp.net中通常要處理這樣的 url重寫,必須在iis中將 對映到aspnet isapi.dll c windows microsoft.net framewor...
慎用url重寫
為了使url位址更加友好 當然可能有別的原因 很多站點使用了url重寫,如 http www.cnblogs.com life,在asp.net中通常要處理這樣的url重寫,必須在iis中將 對映到aspnet isapi.dll c windows microsoft.net framework ...