方法重寫(Override)
方法重寫(Override)
“兩同兩小一大”規則
方法的重寫需要遵循“兩同兩小一大”規則:
- “兩同”:方法名相同,引數列表相同
- “兩小”:子類方法返回值型別應該比父類方法返回值型別更小或相等;子類方法宣告丟擲的異常應該比父類方法宣告丟擲的異常更小或相等。
- “一大”:子類方法的訪問許可權應該比父類方法更大或相等。
里氏替換原則
里氏替換原則(Liskov Substitution Principle,LSP)由麻省理工學院電腦科學實驗室的里斯科夫(Liskov)女士在 1987 年的“物件導向技術的高峰會議”(OOPSLA)上發表的一篇文章《資料抽象和層次》(Data Abstraction and Hierarchy)中提出:繼承必須確保超類擁有的性質在子類中仍然成立(Inheritance should ensure that any property proved about supertype objects also holds for subtype objects)。也就是說:當一個子類的例項能夠替換任何父類的例項時,它們之間才具有is-A關係。
里氏替換原則主要闡述了有關繼承的一些原則,即什麼時候應該使用繼承,什麼時候不應該使用繼承,以及其中蘊含的原理。里氏替換原則是繼承複用的基礎,它反映了基類與子類之間的關係,是開閉原則的補充,是實現抽象化的具體步驟的規範。
里氏替換原則通俗的講就是:子類可以擴充父類的功能,但不能改變父類原有的功能。也就是說:由父類派生出子類時,除了新增新的方法完成新增功能外,儘量不要重寫父類的方法。
如果通過重寫父類的方法來完成新的功能,這樣寫起來雖然簡單,但是整個繼承體系的可複用性會比較差,特別是運用多型比較頻繁時,程式執行出錯的概率會很大。
相關文章
- override(重寫) and overload(過載)IDE
- 子類重寫父類的方法@Override的快捷鍵IDE
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java-override重寫與overload過載JavaIDE
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 重寫equals方法以及重寫tostring方法
- C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解C#IDE
- 方法重寫
- C#基礎:多型:基類可以定義並實現虛(virtual)方法,派生類可以重寫(override)這些方法...C#多型IDE
- 方法的重寫
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- java 方法重寫概念Java
- 二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)SpringGCCloud分散式微服務架構JavaIDE
- Java中方法重寫與方法過載Java
- java方法的神奇修改(重寫)Java
- 為什麼重寫 equals() 方法,一定要重寫 hashCode() 呢?| HashMapHashMap
- 方法重置和重寫的區別
- JavaBean重寫Object類中的方法JavaBeanObject
- makefile之overrideIDE
- Aura QuickAction OverrideUIIDE
- 重寫JS中的apply,call,bind,new方法JSAPP
- python繼承和重寫init方法--例項Python繼承
- Python中有重寫和過載的方法嗎?Python
- PHP 方法重寫,引數不同,報錯: DeclarationPHP
- 重寫Java的String及其大部分方法Java
- Java 面試題關於方法的重寫Java面試題
- java為什麼要重寫hashCode和equals方法Java
- 二、Java初級--8、繼承和重寫方法Java繼承
- 重寫陣列的方法(改變原陣列)陣列
- 或許你並不需要重寫 init(from:) 方法
- js中Array方法重寫(二):myForEach;myEvery;mySome;myFilter;myReduceJSFilter
- Java中final修飾的方法是否可以被重寫Java
- 重寫toString
- hashcode重寫
- 重寫ThreadPoolTaskExecutorthread
- 為什麼重寫equals必須重寫hashCode
- 從jvm角度看懂類初始化、方法過載、重寫。JVM
- 從jvm角度看懂類初始化、方法重寫、過載。JVM