方法重寫(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的快捷鍵IDE
- override(重寫) and overload(過載)IDE
- Java 重寫(Override)與過載(Overload)JavaIDE
- c# abstract抽象類_非抽象類_virtual_虛方法_override重寫C#抽象IDE
- Java-override重寫與overload過載JavaIDE
- 方法重寫
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 重寫equals()方法時,需要同時重寫hashCode()方法
- C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解C#IDE
- java 方法重寫概念Java
- C#基礎:多型:基類可以定義並實現虛(virtual)方法,派生類可以重寫(override)這些方法...C#多型IDE
- 建議重寫equals方法時也一併重寫hashCode方法
- Java重寫equals方法時為什麼要重寫hashcode方法Java
- java之方法的重寫Java
- 過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分IDE型別
- Java中方法重寫與方法過載Java
- java方法的神奇修改(重寫)Java
- 【iOS】category重寫方法的呼叫iOSGo
- 為什麼重寫 equals() 方法,一定要重寫 hashCode() 呢?| HashMapHashMap
- 基礎才是重中之重~方法override詳解IDE
- c# sealed override密封類_密封方法C#IDE
- JavaBean重寫Object類中的方法JavaBeanObject
- 方法重置和重寫的區別
- Java之所有物件的公用方法>9.Always override hashCode when you override equalsJava物件IDE
- Java 面試題關於方法的重寫Java面試題
- 複習java面對物件(方法重寫)Java物件
- python繼承和重寫init方法Python繼承
- 重寫Object.equals()方法和Object.hashCode()方法Object
- 二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)SpringGCCloud分散式微服務架構JavaIDE
- C++基礎::語法特性::函式重寫(override)與協變返回型別(covariant return type)C++函式IDE型別
- 07-08、構造方法基本概念:重寫init方法構造方法
- PHP 方法重寫,引數不同,報錯: DeclarationPHP
- java 新建立的類要重寫的方法Java
- Override setterIDE
- 重寫equals()時為什麼也得重寫hashCode()之深度解讀equals方法與hashCode方法淵源
- 重寫JS中的apply,call,bind,new方法JSAPP
- python繼承和重寫init方法--例項Python繼承
- 重寫Java的String及其大部分方法Java