當前位置:編程學習大全網 - 行動軟體 - 如何理解裏氏替換原則

如何理解裏氏替換原則

裏氏代換原則(Liskov Substitution Principle, LSP):所有引用基類(父類)的地方必須能透明地使用其子類的對象

裏氏代換原則告訴我們,在軟件中將壹個基類對象替換成它的子類對象,程序將不會產生任何錯誤和異常,反過來則不成立,如果壹個軟件實體使用的是壹個子類對象的話,那麽它不壹定能夠使用基類對象。例如:我喜歡動物,那我壹定喜歡狗,因為狗是動物的子類;但是我喜歡狗,不能據此斷定我喜歡動物,因為我並不喜歡老鼠,雖然它也是動物。

例如有兩個類,壹個類為BaseClass,另壹個是SubClass類,並且SubClass類是BaseClass類的子類,那麽壹個方法如果可以接受壹個BaseClass類型的基類對象base的話,如:method1(base),那麽它必然可以接受壹個BaseClass類型的子類對象sub,method1(sub)能夠正常運行。反過來的代換不成立,如壹個方法method2接受BaseClass類型的子類對象sub為參數:method2(sub),那麽壹般而言不可以有method2(base),除非是重載方法。

裏氏代換原則是實現開閉原則的重要方式之壹,由於使用基類對象的地方都可以使用子類對象,因此在程序中盡量使用基類類型來對對象進行定義,而在運行時再確定其子類類型,用子類對象來替換父類對象。

在使用裏氏代換原則時需要註意如下幾個問題:

(1)子類的所有方法必須在父類中聲明,或子類必須實現父類中聲明的所有方法。根據裏氏代換原則,為了保證系統的擴展性,在程序中通常使用父類來進行定義,如果壹個方法只存在子類中,在父類中不提供相應的聲明,則無法在以父類定義的對象中使用該方法。

(2) 我們在運用裏氏代換原則時,盡量把父類設計為抽象類或者接口,讓子類繼承父類或實現父接口,並實現在父類中聲明的方法,運行時,子類實例替換父類實例,我們可以很方便地擴展系統的功能,同時無須修改原有子類的代碼,增加新的功能可以通過增加壹個新的子類來實現。裏氏代換原則是開閉原則的具體實現手段之壹。

(3) Java語言中,在編譯階段,Java編譯器會檢查壹個程序是否符合裏氏代換原則,這是壹個與實現無關的、純語法意義上的檢查,但Java編譯器的檢查是有局限的。

  • 上一篇:Linux系統怎麽查看版本號
  • 下一篇:東營天氣預報
  • copyright 2024編程學習大全網