您好,登錄后才能下訂單哦!
???????? 這是我之前對于面向對象6大原則的學習筆記,其中對里氏替換原則的理解不夠深刻,https://blog.51cto.com/zhangzhao/2396810。
???????? 根據(jù)百度百科的資料,里氏替換原則的定義為:Liskov于1987年提出了一個關于繼承的原則“Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.”——“繼承必須確保超類所擁有的性質在子類中仍然成立?!币簿褪钦f,當一個子類的實例應該能夠替換任何其超類的實例時,它們之間才具有is-A關系。
???????? 簡單來說,就是當子類替換其基類的時候,程序的行為沒有發(fā)生任何變化。
???????? 這就要求:
???????? 1. 子類可以實現(xiàn)父類的抽象方法,但是不能重寫父類的非抽象方法。(這里需要區(qū)分下重寫和重載的概念,重寫是指函數(shù)名相同,函數(shù)的簽名或者說參數(shù)類型相同;而重載是函數(shù)名相同,函數(shù)的簽名或者說參數(shù)類型不同,面向對象語言的多態(tài)性會在運行時根據(jù)傳入的實參類型自動匹配最適合的函數(shù)進行調用)
???????? 2. 子類可以增加自己的特性。
???????? 3. 子類的在重載父類方法時,方法的前置條件(形參)要比父類方法的輸入?yún)?shù)更寬松。這是因為如果子類方法的參數(shù)范圍更小的話,在運行調用函數(shù)的時候,可能就會先調用子類的重載函數(shù),這是違反里氏替換原則的。
???????? 4. 重載父類方法時輸出結果(返回值)可以被縮小。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。