慎用過載 1

2021-06-20 02:09:53 字數 1241 閱讀 3897

物件的執行時型別並不影響「哪個過載版本將被執行」;選擇工作是在編譯時候進行的,完全基於引數的編譯時型別。

看個例子先:

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)

}}

object

object

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)

}}

正如你所料,結果是:

grandfather

father

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 ...