重寫(Override)
重寫是子類別對父類別的允許存取的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!
重寫的好處在於子類別可以根據需要,定義特定於自己的行為。 也就是說子類別能夠根據需要實作父類別的方法。
重寫方法不能拋出新的檢查異常或比被重寫方法申明更加寬泛的異常。例如: 父類別的一個方法申明了一個檢查異常 IOException,但是在重寫這個方法的時候不能拋出 Exception 異常,因為 Exception 是 IOException 的父類,只能拋出 IOException 的子類異常。
方法的重寫規則
參數清單必須完全與被重寫方法的相同;
返回類型必須完全與被重寫方法的回傳類型相同;
存取權不能比父類中重寫的方法的存取權限更低。例如:如果父類別的一個方法被宣告為public,那麼在子類別中重寫該方法就不能宣告為protected。
父類別的成員方法只能被它的子類別重寫。
宣告為final的方法不能被重寫。
宣告為static的方法不能被重寫,但是能夠再次被宣告。
子類別和父類別在同一個套件中,那麼子類別可以重寫父類別所有方法,除了宣告為private和final的方法。
子類別和父類別不在同一個套件中,那麼子類別只能夠重寫父類別的宣告為public和protected的非final方法。
重寫的方法能夠拋出任何非強制異常,無論被重寫的方法是否拋出異常。但是,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常,反之則可以。
構造方法不能被重寫。
如果不能繼承一個方法,就不能重寫這個方法。
重載(Overload)
重載(overloading) 是在一個類別裡面,方法名字相同,而參數不同。傳回類型可以相同也可以不同。
每個重載的方法(或建構子)都必須有一個獨一無二的參數型別清單。
只能重載構造函數
重載規則
被重載的方法必須改變參數列表(參數個數或類型或順序不一樣);
被重載的方法可以改變返回類型;
被重載的方法可以改變存取修飾符;
被重載的方法可以聲明新的或更廣的檢查異常;
方法能夠在同一個類別中或在一個子類別中被重載。
無法以回傳值型別為重載函數的區分標準
總結
方法的重寫(Overriding)和重載(Overloading)是java多態性的不同表現,重寫是父類與子類之間多態性的一種表現,重載是一類中多態性的一種表現。
以上就是本文的全部內容,希望本文的內容對大家的學習或是工作能帶來一定的幫助,同時也希望多多支持PHP中文網!
更多Java重寫與重載之間的區別相關文章請關注PHP中文網!