第10章 組合和繼承

2021-10-06 03:09:51 字數 1509 閱讀 3147

組合的意思是乙個類可以包含對另乙個類的引用,利用這個被引用類來幫助他完成任務,而繼承是超類/子類的關係

1 乙個二維的布局類庫

2 抽象類

abstract class element
3 定義無參方法
abstract class element
4 擴充套件類
class arrayelement(conts: array[string]) extends element
5 重寫方法和字段
class arrayelement(conts: array[string]) extends element
6 定義引數化欄位
//類引數前加了val

class arrayelement(val contents: array[string]) extends element

//等價於

class arrayelement(x123: array[string]) extends element

7 呼叫超類構造方法
class lineelement(s: string) extends arrayelement(array(s))
8 使用 override 修飾符
class lineelement(s: string) extends arrayelement(array(s))
9 多型和動態繫結

型別為基類的變數可以指向乙個型別為子類的物件,這個現象的名稱叫作多型。動態繫結是指被呼叫的方法實現是在執行時基於物件的型別來決定的,而不是變數或表示式的型別決定的

10 宣告 final 成員

如果想確保某個成員不能被子類重寫,可以在成員加上 final 修飾符,想確保某個類沒有子類,可以在類宣告之前加上 final 修飾符

11 使用組合與繼承

如果追求**復用,一般來說你應當優先選擇組合而不是繼承,只有繼承才會受到基類脆弱問題的困擾,會在修改超類時不小心破壞了子類的**,關於繼承關係,那就是要建模的這個關係是否是is-a(是乙個)的關係

12 實現above、beside和 tostring

def above(that: element): element = 

//指令式風格,明顯標誌是使用下標遍歷陣列時使用的迴圈

def beside(that: element): element =

new arrayelement(contents)

}//函式式程式設計

def beside(that: element): element =

13 定義工廠物件

使用工廠方法建立物件的好處是物件建立的邏輯被集中起來,而物件時如何用具體的類表示的可以被隱藏起來,這樣既可以讓你的類庫更容易被理解,因為暴露的細節更少,同時還提供了更多的機會讓你在未來在不破壞使用方**的前提下改變類庫的實現

14 增高和增寬

15 放在一起

16 結語

第10章 介面 繼承與多型 多型

利用多型可以使程式具有良好的擴充套件性,並可以對所有類物件進行通用的處理。如果定義乙個四邊形類,讓它處理所有繼承該類的物件,根據 向上轉型 原則可以使每個繼承四邊形類的物件作為draw 方法的引數,然後在draw 方法中做一些限定就可以根據不同圖形類物件繪製相應的影象,從而更為通用的四邊形類來取代具...

組合繼承和寄生式組合繼承

組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。缺點 呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可...

繼承和組合

繼承是一種白箱復用,父類的內部細節對子類可見。物件組合彼此不知道對方內部細節,成為黑箱復用。繼承的優缺點 1 子類可以直接重定義父類的操作。2 編譯時刻決定了,無法在執行期間更改。3 子類要知道父類的實現細節,這樣就部分破壞了封裝性。子類和父類依賴過於緊密,父類的某些變化必然導致子類的變化。開發過程...