新手必看!JAVA里@Override和super的區(qū)別(付代碼解說
在編程中,當(dāng)我們在一個類中定義一個方法,并在繼承自該類的子類中重寫這個方法時,我們在子類中的方法上方使用 @Override
標(biāo)簽。這個標(biāo)簽是一種稱為注解(Annotation)的特殊標(biāo)記,它告訴編譯器我們打算重寫(Override)父類中的一個方法。這樣,編譯器就會檢查父類中是否存在我們打算重寫的方法,如果不存在,則會報錯。這是一種保護機制,以防我們因為拼寫錯誤或者方法參數(shù)的錯誤而錯誤地認(rèn)為我們正在重寫一個方法。
??是一個安卓APP開發(fā)的一小節(jié)。
super.onResume();
這一行的 super
關(guān)鍵字是用來調(diào)用父類中的 onResume
方法的。換句話說,它告訴編譯器去找到這個對象的父類中的 onResume
方法,并運行那個方法。在這個情況下,我們首先運行父類中的 onResume
方法,然后運行 resetCheckForToday();
這個方法。這樣做的目的通常是保持父類中 onResume
方法的原始功能,然后在其基礎(chǔ)上增加一些額外的功能。
假如說我們把這個過程比作做一份三明治,父類(super)是提供基礎(chǔ)配方的廚師,子類(我們的代碼)是想在這個基礎(chǔ)配方上增加一些新的配料的廚師。super.onResume();
就像是我們按照原始配方制作三明治,然后 resetCheckForToday();
就像是我們增加了一些新的配料。如果我們不調(diào)用 super.onResume();
,那就相當(dāng)于我們完全忽略了原始的配方,只使用新的配料,這可能會導(dǎo)致三明治做得不好吃。因此,我們通常會先調(diào)用 super.onResume();
來保持原始的配方,然后再增加一些新的配料。
說得再簡單一點,假設(shè)你的家里有一部老舊的電視機,它只有一個按鈕,這個按鈕的功能就是打開或者關(guān)閉電視。這個就像是我們編程中的一個父類,這個父類有一個方法叫做“開關(guān)”。
現(xiàn)在,你的家里買了一部新的電視機,它也有一個按鈕,但是這個按鈕不僅可以打開或者關(guān)閉電視,還可以調(diào)整電視的音量。這個新的電視機就像是我們編程中的一個子類,它重寫(Override)了父類的“開關(guān)”方法,增加了調(diào)整音量的功能。
在編程中,我們在子類中使用 @Override
標(biāo)簽來告訴電腦,我們要改進父類的“開關(guān)”方法,增加新的功能。就像是我們告訴電腦,“看,我這部新電視機的按鈕,它不僅能開關(guān)電視,還能調(diào)音量”。
然后,我們在子類中使用 super
關(guān)鍵字來調(diào)用父類的“開關(guān)”方法。就像是我們先按一下老舊電視機的按鈕,然后再調(diào)整新電視機的音量。在編程中,我們寫的就是 super.開關(guān)();
,這樣就可以使用父類的開關(guān)功能了。
然后,我們在 super.開關(guān)();
下面添加新的功能,也就是調(diào)整音量的功能。在編程中,我們會寫調(diào)整音量();
。
所以,@Override
和 super
的使用就像是我們在告訴電腦,“看,我這部新電視機的按鈕,它不僅能像老舊電視機一樣開關(guān)電視,還能調(diào)音量。”