裡氏代換原則由2008年圖靈獎得主、美國第一位計算機科學女博士Barbara Liskov教授和卡內基·梅隆大學Jeannette Wing教授於1994年提出。傳統的官方定義比較拗口且難以理解,這裡,給出一個較為通俗易懂的定義:
所有引用基類(父類)的地方必須能透明地使用其子類的對象。
只要父類能出現的地方子類就可以出現,而且替換為子類還不產生任何錯誤或異常,使用者可能根本就不需要知道是父類還是子類。但是,反過來就不行了,有子類出現的地方,父類未必就能適應。
下面通過具體程序實例進行進一步的解釋。
父類作函數聲明,但並不實現具體函數,以虛函數的形式呈現,即什麼也不做,空實現。
子類一繼承自父類SourceView,並具體實現 show 方法
子類二同樣繼承自父類SourceView,並具體實現 show 方法
最後在ViewController中引入,並實例化,最終運行結果如下:
系統的擴展性,在程序中通常使用父類來進行定義,如果一個方法只存在子類中,在父類中不提供相應的聲明,則無法在以父類定義的對象中使用該方法。
盡量把父類設計為抽象類或者接口,讓子類繼承父類或實現父接口,並實現在父類中聲明的方法,運行時,子類實例替換父類實例,我們可以很方便地擴展系統的功能,同時無須修改原有子類的代碼,增加新的功能可以通過增加一個新的子類來實現。