第十一節:小結(Java 重寫(Override)與過載(Overload))
這些小結是對前面知識的擴充套件,前面有些地方可能寫的不是很詳細,所以就加了後面的這幾節內容,希望能多多幫助到大家。
重寫(Override)
重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。 即外殼不變,核心重寫!
重寫的好處在於子類可以根據需要,定義特定於自己的行為。 也就是說子類能夠根據需要實現父類的方法。
重寫方法不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的異常。例如: 父類的一個方法申明瞭一個檢查異常 IOException,但是在重寫這個方法的時候不能丟擲 Exception 異常,因為 Exception 是 IOException 的父類,只能丟擲 IOException 的子類異常。
在面向物件原則裡,重寫意味著可以重寫任何現有方法。例項如下:


在上面的例子中可以看到,儘管b屬於Animal型別,但是它執行的是Dog類的move方法。
這是由於在編譯階段,只是檢查引數的引用型別。
然而在執行時,Java虛擬機器(JVM)指定物件的型別並且執行該物件的方法。
因此在上面的例子中,之所以能編譯成功,是因為Animal類中存在move方法,然而執行時,執行的是特定物件的方法。
方法的重寫規則
1.引數列表必須完全與被重寫方法的相同;
2.返回型別必須完全與被重寫方法的返回型別相同;
3.訪問許可權不能比父類中被重寫的方法的訪問許可權更低。例如:如果父類的一個方法被宣告為public,那麼在子類中重寫該方法就不能宣告protected。
4.父類的成員方法只能被它的子類重寫。
5.宣告為final的方法不能被重寫。
6.宣告為static的方法不能被重寫,但是能夠被再次宣告。
7.子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了宣告為private和final的方法。
8.子類和父類不在同一個包中,那麼子類只能夠重寫父類的宣告為public和protected的非final方法。
9.重寫的方法能夠丟擲任何非強制異常,無論被重寫的方法是否丟擲異常。但是,重寫的方法不能丟擲新的強制性異常,或者比被重寫方法宣告的更廣泛的強制性異常,反之則可以。
10.構造方法不能被重寫。
11.如果不能繼承一個方法,則不能重寫這個方法。
Super關鍵字的使用
當需要在子類中呼叫父類的被重寫方法時,要使用super關鍵字。


過載(Overload)
過載(overloading) 是在一個類裡面,方法名字相同,而引數不同。返回型別可以相同也可以不同。
每個過載的方法(或者建構函式)都必須有一個獨一無二的引數型別列表。
最常用的地方就是構造器的過載。
過載規則:
1.被過載的方法必須改變引數列表(引數個數或型別或順序不一樣);
2.被過載的方法可以改變返回型別;
3.被過載的方法可以改變訪問修飾符;
4.被過載的方法可以宣告新的或更廣的檢查異常;
5.方法能夠在同一個類中或者在一個子類中被過載。
6.無法以返回值型別作為過載函式的區分標準。
例項:



重寫與過載之間的區別:

總結:
方法的重寫(Overriding)和過載(Overloading)是java多型性的不同表現,重寫是父類與子類之間多型性的一種表現,過載是一類中多型性的.
歡迎關注微信公眾號: Java的學習之路
裡面資料非常全,從java初級到高階都有,視訊,電子書,面試寶典,簡歷模板,經典案例,原始碼分析程式設計師故事以及解決bug方法。。。。應有盡有,可以推薦大家一起學習下!!
