長(zhǎng)按關(guān)注:編碼那些事 首先我們來(lái)講講:重載(Overloading) (1)方法重載是讓類(lèi)以統(tǒng)一的方式處理不同類(lèi)型數(shù)據(jù)的一種手段。多個(gè)同名函數(shù)同時(shí)存在,具有不同的參數(shù)個(gè)數(shù)/類(lèi)型。重載Overloading是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。 (2)Java的方法重載,就是在類(lèi)中可以創(chuàng)建多個(gè)方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。調(diào)用方法時(shí)通過(guò)傳遞給它們的不同參數(shù)個(gè)數(shù)和參數(shù)類(lèi)型來(lái)決定具體使用哪個(gè)方法, 這就是多態(tài)性。 (3)重載的時(shí)候,方法名要一樣,但是參數(shù)類(lèi)型和個(gè)數(shù)不一樣,返回值類(lèi)型可以相同也可以不相同。無(wú)法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。 然后我們?cè)賮?lái)談?wù)劊?nbsp;重寫(xiě)(Overriding) (1)父類(lèi)與子類(lèi)之間的多態(tài)性,對(duì)父類(lèi)的函數(shù)進(jìn)行重新定義。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě) (Overriding)。在Java中,子類(lèi)可繼承父類(lèi)中的方法,而不需要重新編寫(xiě)相同的方法。但有時(shí)子類(lèi)并不想原封不動(dòng)地繼承父類(lèi)的方法,而是想作一定的修改,這就需要采用方法的重寫(xiě),方法重寫(xiě)又稱(chēng)方法覆蓋。 (2)若子類(lèi)中的方法與父類(lèi)中的某一方法具有相同的方法名、返回類(lèi)型和參數(shù)表,則新方法將覆蓋原有的方法。如需父類(lèi)中原有的方法,可使用super關(guān)鍵字,該關(guān)鍵字引用了當(dāng)前類(lèi)的父類(lèi)。 (3)子類(lèi)函數(shù)的訪(fǎng)問(wèn)修飾權(quán)限不能少于父類(lèi)的; 重寫(xiě)方法的規(guī)則: (1)參數(shù)列表必須完全與被重寫(xiě)的方法相同,否則不能稱(chēng)其為重寫(xiě)而是重載。 (2)返回的類(lèi)型必須一直與被重寫(xiě)的方法的返回類(lèi)型相同,否則不能稱(chēng)其為重寫(xiě)而是重載,方法重寫(xiě)時(shí),返回值可以是變小,就是可以是父類(lèi)被重寫(xiě)的方法的返回值的子類(lèi); (3)訪(fǎng)問(wèn)修飾符的限制一定要大于被重寫(xiě)方法的訪(fǎng)問(wèn)修飾符(public>protected>default>private) (4)重寫(xiě)方法一定不能拋出新的檢查異?;蛘弑缺恢貙?xiě)方法申明更加寬泛的檢查型異常。例如:父類(lèi)的一個(gè)方法申明了一個(gè)檢查異常IOException,在重寫(xiě)這個(gè)方法是就不能拋出Exception,只能拋出IOException的子類(lèi)異常,可以?huà)伋龇菣z查異常。
而重載的規(guī)則: (1)必須具有不同的參數(shù)列表; (2)可以有不責(zé)罵的返回類(lèi)型,只要參數(shù)列表不同就可以了; (3)可以有不同的訪(fǎng)問(wèn)修飾符; (4)可以?huà)伋霾煌漠惓#?/span>
重寫(xiě)與重載的區(qū)別在于: 重寫(xiě)多態(tài)性起作用,對(duì)調(diào)用被重載過(guò)的方法可以大大減少代碼的輸入量,同一個(gè)方法名只要往里面?zhèn)鬟f不同的參數(shù)就可以擁有不同的功能或返回值。用好重寫(xiě)和重載可以設(shè)計(jì)一個(gè)結(jié)構(gòu)清晰而簡(jiǎn)潔的類(lèi),可以說(shuō)重寫(xiě)和重載在編寫(xiě)代碼過(guò)程中的作用非同一般。 您的關(guān)注是對(duì)我最大的支持 長(zhǎng)按關(guān)注:編碼那些事 |
|
來(lái)自: 孤獨(dú)學(xué)者666 > 《軟件》