重寫(Override)
- 重寫是子類對父類的允許訪問的方法的實現(xiàn)過程進行重新編寫曼振,返回值和形參讀不能改變珍坊。即外殼不變侵状,核心重寫赞弥。
- 重寫的好處在于子類可以根據(jù)需要,定義特定于自己的行為趣兄,也就是說子類能夠根據(jù)需要實現(xiàn)父類的方法绽左。
- 重寫方法不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的異常艇潭。
- 在面向對象原則里拼窥,重寫意味著可以重寫任何現(xiàn)有方法。
方法的重寫規(guī)則
- 參數(shù)列表必須完全與被重寫方法的相同蹋凝。
- 返回類型必須完全與被重寫方法的返回類型相同鲁纠。
- 訪問權限不能比父類中被重寫的方法的訪問權限更低。
- 父類的成員方法只能被它的子類重寫鳍寂。
- 聲明為final的方法不能被重寫改含。
- 聲明為static的方法不能被重寫,但是能夠被再次聲明迄汛。
- 子類和父類在同一個包中捍壤,那么子類可以重寫父類所有方法,除了聲明為private和final的方法鞍爱。
- 子類和父類不在同一個包中白群,那么子類只能夠重寫父類的聲明為public和protected的非final方法。
- 重寫的方法能夠拋出任何非強制異常硬霍,無論被重寫的方法是否拋出異常漠秋。但是姐仅,重寫的方法不能拋出新的強制性異常,或者比被重寫方法聲明的更廣泛的強制性異常莽鸿,反之則可以躬柬。
- 構造方法不能被重寫拜轨。
- 如果不能繼承一個方法,則不能重寫這個方法允青。
- 當需要在子類中調用父類的被重寫方法時橄碾,要使用super關鍵字。
重載(Overload)
重載(overloading)是在一個類里面,方法名字相同法牲,而參數(shù)不同史汗。返回類型可以相同也可以不同。
每個重載的方法(或者構造函數(shù))都必須有一個獨一無二的參數(shù)類型列表拒垃。
最常用的地方就是構造器的重載停撞。
重載規(guī)則
- 被重載的方法必須改變參數(shù)列表(參數(shù)個數(shù)或類型順序不一樣)
- 被重載的方法可以改變返回類型
- 被重載的方法可以改變訪問修飾符
- 被重載的方法可以聲明新的或更廣的檢查異常
- 方法能夠在同一個類中或者在一個子類中被重載。
- 無法以返回值類型作為重載函數(shù)的區(qū)分標準
區(qū)別
區(qū)別點 | 重載方法 | 重寫方法 |
---|---|---|
參數(shù)列表 | 必須修改 | 一定不能修改 |
返回類型 | 可以修改 | 一定不能修改 |
異常 | 可以修改 | 可以減少或刪除悼瓮,一定不能拋出新的或者更廣的異常 |
訪問 | 可以修改 | 一定不能做更嚴格的限制(可以降低限制) |
總結
方法的重寫(Overriding)和重載(Overloading)是java多態(tài)性的不同表現(xiàn)戈毒,重寫是父類與子類之間多態(tài)性的一種表現(xiàn),重載可以理解成多態(tài)的具體表現(xiàn)形式横堡。