物件導向概念 子類和子型別

2021-04-13 01:37:15 字數 563 閱讀 8127

提到「子類」和「子型別」是不同的,替換原則只適合於子型別關係,而一般程式語言只是考慮了子類關係,子類說明了新類是繼承自父類,而子型別強調的是新類具有父類一樣的行為(未必是繼承)。那麼,什麼時候才應該使用繼承?那就是符合子型別關係的時候,或者一般所說的」is a"關係,你必須保證新類的行為與父類完全一致!!!在任何使用父類的場合,新類應該表現一樣的行為。

經典案例:正方形是長方形的子類,但不是子型別

如果讓正方形當做是長方形的子類,會出現什麼情況呢?我們讓正方形從長方形繼承,然後在它的內部設定width等於height,這樣,只要width或者height被賦值,那麼width和height會被同時賦值,這樣就保證了正方形類中,width和height總是相等的.現在我們假設有個客戶類,其中有個方法,規則是這樣的,測試傳人的長方形的寬度是否大於高度,如果滿足就停止下來,否則就增加寬度的值.現在我們來看,如果傳人的是基類長方形,這個執行的很好.根據lsp,我們把基類替換成它的子類,結果應該也是一樣的,但是因為正方形類的width和height會同時賦值,這個方法沒有結束的時候,條件總是不滿足,也就是說,替換成子類後,程式的行為發生了變化,它不滿足lsp.(黎克特制代換原則) 

python物件導向程式設計(鴨子型別)

python不支援多型,也不用支援多型,而是一種多型的語言。鴨子型別 duck typing 是動態型別的一種風格,不是由繼承特定的類或實現特定的介面,而是當前的方法和屬性的集合決定,鴨子型別中關注的不是物件的型別本身,而是他如何使用。簡單理解 在使用支援鴨子型別的語言中,乙個函式可以接受任意型別的...

鴨子型別 物件導向多型的理解

在程式設計中,鴨子型別 duck typing 是動態型別的一種風格。鴨子型別的核心概念在於乙個物件的有效語義,不是繼承自特定的類或者實現特定的方法,而是由當前的屬性和方法集合決定的。鴨子型別 可以這樣表述 乙隻鳥走起來像鴨子 游泳起來像鴨子 叫起來也像鴨子,那麼這只鳥可以被稱為鴨子 在鴨子型別中,...

5 3 子類和物件

5.3 子類和物件 5.3.1 子類物件的特點 子類的方法可以操作未繼承的變數,子類的物件可以用子類建立的方法操作這部分變數 例子 public class example5 2 people public class example5 2 chinapeople extends example5 ...