2011-07-31 56 views
6

當我們在子類中覆蓋的方法,我們調用父類的方法,這種方法中,例如:Android的方法覆蓋

protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    width = w ; 
    height = h ; 

    Log.d(TAG, "onSizeChanged: width " + width + ", height "+ height); 

    super.onSizeChanged(w, h, oldw, oldh); 
} 

那麼,爲什麼我們需要調用super.onSizeChanged()

我刪除行super.onSizeChanged(),結果與它相同。我們稱之爲super.onCreate()

回答

1

有一些方法可以做基本的事情,比如onCreate和onPause活動方法。如果您在不調用超級方法的情況下覆蓋它們,那些事情就不會發生,並且活動將不會按照它應該的那樣運行。在其他情況下(通常當你實現一個接口的時候)沒有你重寫的實現,只有聲明,因此不需要調用super方法。

還有一件事,有時你重寫一個方法,你的目的是改變原始方法的行爲,而不是擴展它。在這些情況下,您不應該調用超級方法。一個例子是擺動組件的繪製方法。

1

對於某些方法,您必須調用超級方法來初始化某個對象或變量(否則您會得到一個supernotcall異常),對於其他您可以稱之爲但您確實注意到的異常。

+0

有人可以解釋更多的深度?) –

2

在面向對象編程中,用戶可以在子類中繼承超類的屬性和行爲。一個子類可以重寫它的超類的方法,用它自己的方法實現超類的實現。

有時候壓倒一切的方法將完全在超替換相應的功能,而在其他情況下,父類的方法仍然必須從上位法調用。因此,大多數編程語言都要求重寫方法必須顯式調用超類的重寫方法才能執行它。

0

有很多的東西,Android的API將在OnCreate(或任何其他ON_ _ ___)你Activity類的方法做。

現在,當你覆蓋的方法,您的實現將運行活動,同時,因爲這就是壓倒一切的是爲使用而不是一個在活動課。它覆蓋父級(即Activity類)實現,並將其替換爲子級實現(即Your class)。

因此Android強制執行這個規則,你總是需要除了父母的實現中調用自己的實現,使母公司的實施(其中包含許多重要的事情)保持,除了您的實現完好無損。

我希望這是足夠精細,使清晰。