重寫(Override)
重寫是子類對父類的允許訪問的方法的實作程序進行重新撰寫, 回傳值和形參都不能改變,即外殼不變,核心重寫!
重寫的好處,在于子類可以根據自身需要,定義特定于自己的行為, 也就是說子類能夠根據需要重寫父類的方法,
重寫方法不能拋出新的檢查例外或者比被重寫方法申明更加寬泛的例外,
方法重寫的規則
-
引數串列與被重寫方法的引數串列必須完全一致,
-
回傳型別與被重寫方法的回傳型別可以不相同,但是必須是父類回傳值的派生類,
-
訪問權限不能比父類中被重寫的方法的訪問權限更低,
-
父類的成員方法只能被它的子類重寫,
-
被 final修飾的方法不能被重寫,
-
被static修飾的,即靜態方法不能被重寫,但是能夠被再次宣告,
-
子類和父類在同一個包中,那么子類可以重寫父類所有方法,除了訪問權限是private 和 被final修飾 的方法,
-
子類和父類不在同一個包中,那么子類只能夠重寫父類的宣告為 public 和 protected 的非 final 方法,
-
重寫的方法能夠拋出任何非強制例外,無論被重寫的方法是否拋出例外,但重寫的方法不能拋出新的強制性例外,或者比被重寫方法宣告的更廣泛的強制性例外,反之則可以,
-
構造器不能被重寫,
-
如果不能繼承一個類,則不能重寫該類的方法,
ps:強制例外和非強制例外參考:https://blog.csdn.net/wusecaiyun/article/details/48918467
當需要在子類中呼叫父類的被重寫方法時,可以使用 super 關鍵字,
多載(Overload)
多載是在一個類里面,方法名字相同,而引數不同,回傳型別可以相同也可以不同,
每個多載的方法(或者建構式)都必須有一個獨一無二的引數型別串列,
最常用的場景就是構造器的多載,
重寫的規則:
- 被多載的方法必須改變引數串列(引數個數或型別不一樣),
- 被多載的方法可以改變回傳值型別,
- 被多載的方法可以改變訪問權限修飾符,
- 被多載的方法可以宣告新的或更廣的檢查例外;
- 方法能夠在同一個類中或者在一個子類中被多載,
- 無法以回傳值型別作為多載方法的區分標準,
重寫與多載之間的區別
| 區分點 | 重寫(Override) | 多載(Overload) |
| 引數串列 | 必須一致 | 必須修改 |
| 回傳型別 | 必須一致 | 可以修改 |
| 例外 | 可以減少或洗掉,一定不能拋出新的或更廣的例外 | 可以修改 |
| 訪問權限 | 不能做更為嚴格的限制(即不能比唄被重寫方法的權限更低) | 可以修改 |
總結
- 方法多載是一個類中定義了多個方法名相同,而他們的引數的數量不同或數量相同而型別和次序不同,則稱為方法的多載(Overloading),
- 方法重寫是在子類存在方法與父類的方法的名字相同,而且引數的個數與型別一樣,回傳值也一樣的方法,就稱為重寫(Overriding),
- 方法多載是一個類的多型性表現,而方法重寫是子類與父類的一種多型性表現,
ps:放在最后的一張圖例:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243114.html
標籤:Java
下一篇:HashMap--小筆記
