1.復合,表示has a
template calss a這裡表示 a 裡面有乙個 b,a 可以呼叫 b 寫好了的功能函式,b 裡的東西可能更多更強大,a 只取其中一些用;
復合關係下的構造和析構:
1)構造是由內而外進行的,在上例中,a 的構造會先呼叫 b 的預設構造函式,再執行自己的。
2)析構是由外而內進行的,在上例中,a 會先執行自己的,再執行 b 的析構函式。
當然,呼叫 b 的構造和析構都是編譯器自動進行的,不用我們自己寫,如果在構造 b 時不想使用預設構造就需要自己寫哪個建構函式;
2.委託
大致描述就是 a 類裡有個指標指向 b 類,在 a 需要的時候就可以呼叫 b;
需要注意的是,委託和復合裡都是有乙個其他類,但是他們的生命期是不一致的:
1)復合是 a 和 b 一起構造,生命是一起出現
2)委託是 a 在需要使用 b 時,b的生命才開始,並不同步
在上圖的例子中,string 類只是作為對外的介面,它的實際實現都是在左邊的 stringrep類 中
Java程式設計之 復合優先於繼承
組合 通過建立乙個由其他物件組合的物件來獲得新功能的重用方法 新功能的獲得是通過呼叫組合物件的功能實現的 有時又叫聚合 例如 乙個物件擁有或者對另外乙個物件負責並且兩個物件有相同的生命週期。gof 乙個物件包含另乙個物件集合 被包含物件對其他物件是不可見的並且只能從包含它的物件中訪問的特殊組合形式 ...
Go 物件導向程式設計之繼承
package main import fmt 編寫乙個學生考試系統 小學生 type pupil struct 顯示他的成績 func p pupil showinfo func p pupil setscore score int func p pupil testing 大學生,研究生。大學生...
物件導向程式設計之封裝 繼承和重寫
封裝的含義 對屬性進行操作 將資料 屬性 和行為 方法 包裝到類物件中。在方法內部對屬性進行操作,早類物件的外部呼叫方法。這樣,無須關心方法內部的具體實現細節,從而隔壁了複雜度。在類物件的內部通過訪問控制把某些屬性和方法隱藏起來,不允許在類物件的外部直接訪問,而是在類物件的內部對外提供公開的介面方法...