閱讀隨筆之組合與繼承
組合:(has-a)將一個物件的引用置於新的物件中。(這是我自己的解釋,不是專業術語)
繼承:(is-a)繼承不是複製基類的介面,當你建立一個匯出類的物件時,該物件包含了一個基類的子物件。這個子物件與你直接建立物件是一樣的。二者的區別在於,後者來自於外部,而基類的子物件被包裝在匯出類物件內部。
閱讀上面倆應該已經可以看出一點了,組合是來自於外部,而繼承過來的則包裝在你的匯出類內部。但還是有些模糊。
組合通常用於想在新類中使用現有類的功能。
在繼承的時候使用現有類,並開發一個他的通用版本,通常你使用一個通用類(幾何形)將其特殊話(三角形,正方形),也就是java多型的表現。
上面兩句話簡單來說就是(is-a)是一個的時候用繼承,(has-a)有一個的時候用組合。
一個最清晰的判斷是不是需要用到繼承就是問下自己需不需要從新類向基類進行向上轉型,如果必須要向上轉型,則繼承是必須的,如果不需要,則自己需要好好考慮下
繼承和組合都能從現有型別生成一個新的型別。組合一般是將現有型別作為新型別底層實現的一部分加以複用,而繼承複用的是介面。能用組合就儘量不要用繼承,組合更加靈活點。
我的簡單理解,歡迎各位大牛評論區糾正和補充
相關推薦
閱讀隨筆之組合與繼承
組合:(has-a)將一個物件的引用置於新的物件中。(這是我自己的解釋,不是專業術語) 繼承:(is-a)繼承不是複製基類的介面,當你建立一個匯出類的物件時,該物件包含了一個基類的子物件。這個子物件與你直接建立物件是一樣的。二者的區別在於,後者來自於外部,而基類的子物件被包裝在匯出類物件內部。
python面向物件程式設計之組合與繼承
類與類之間有兩種關係:繼承和組合。多用組合少用繼承較好。 先來看兩個例子: 先定義兩個類,一個老師類,老師類有名字,年齡,出生的年,月和日,所教的課程等特徵以及走路,教書的技能。 class Teacher: def __init__(self,name,age,year,mon,day):
Python學習之旅—面向對象進階知識:類的命名空間,類的組合與繼承
ati error role ont 之前 obj say 報錯 抽象 前言 上篇博客筆者帶領大家初步梳理了Python面向對象的基礎知識,本篇博客將專註於解決三個知識點:類的命名空間,類的組合以及面向對象的三大特性之一繼承,一起跟隨筆者老看看今天的內容吧。 1.
C++網易雲課堂開發工程師--組合與繼承
一個 turn component 完成 tro 關系 pac pro art 著一個章節主要圍繞:繼承,復合,委托三個方面進行介紹。 復合:表示has-a template<class T, class Sequence = deque<T>>
python類與物件的組合與繼承
1、把類的物件例項化放到一個新的類裡面叫做類的組合,組合就是指幾個橫向關係的類放在一起,縱向關係的類放在一起是繼承,根據實際應用場景確定。簡單的說,組合用於“有一個”的場景中,繼承用於“是一個”的場景中。例如,水池裡有一個烏龜,天上有一個鳥,地上有一個小甲魚,這些適合使用組合。青瓜是瓜,女人是人,鯊魚是魚,這
函數語言程式設計之組合與管道
7. 組合與管道 昨天我們學習了柯里化與偏函式,當然不能學完就完了,一些經典的函式什麼的還是需要記一下的,比如今天重寫新寫一下看看能不能寫出來,也能加深自己對這方面的理解。 今天我們將要學習的是函式式組合的含義及其實際應用。 Q 函式式組合在函數語言程式設計中被
Java類的組合與繼承 小問題分析(建構函式引數的傳遞方法 、資料隱藏的處理: 對比C++)
一、類的組合: 1、初始化問題(建構函式的引數傳遞方法): 在C++中,通常只要物件中不含有指標類資料的話,物件與物件之間是可以相互賦值且不會出錯的,因此組合出來的類完全可以將傳遞過來的物件引數直接賦值給對應資料成員; 而在java中,物
golang教程之組合代替繼承-Go面向物件
組合代替繼承-Go面向物件 Go不支援繼承,但它確實支援組合。 組合的通用定義是“放在一起”。 組合的一個例子是汽車。 汽車由車輪,發動機和各種其他部件組成。 通過嵌入結構組成 Go中的組合可以通過將一種結構型別嵌入另一種結構型別來實現。 部落格文章是一個完
資料結構與演算法隨筆之------堆與優先佇列
堆是什麼?是一種特殊的完全二叉樹,就像下面這棵樹一樣。 有沒有發現這棵二叉樹有一個特點,就是所有父結點都比子結點要小(注意:圓圈裡面的數是值,圓圈上面的數是這個結點的編號,此規定僅適用於本節)。符合這樣特點的完全二叉樹我們稱為最小堆。反之,如果
Java學習筆記(二)--組合與繼承
繼承是面向物件的三大特徵之一,也是實現軟體複用的重要手段,Java的繼承具有單繼承的特點,每個類只有一個直接父類,可以有多個間接父類。繼承是一種"is-a"的關係。繼承 有開發經驗的人都知道繼承該怎麼寫,我就不再重複造輪子了! 優點:程式碼複用子類可
[Java] 組合與繼承的區別
組合和繼承都允許在新的類中放置子物件,組合是顯式地這樣做,而繼承是隱式地做。 那兩者之間的區別是怎樣的呢?又該如何選擇呢? 很多人對組合理解地還不是很好,所以我們先來理解一下組合: 組合技術通常用於想在新類中使用現有類的功能而非它的介面這種情況。 以car物件舉例: /
[Java] 組合與繼承的區別
組合和繼承都允許在新的類中放置子物件,組合是顯式地這樣做,而繼承是隱式地做。 那兩者之間的區別是怎樣的呢?又該如何選擇呢? 很多人對組合理解地還不是很好,所以我們先來理解一下組合: 組合技術通常用於想在新類中使用現有類的功能而非它的介面這種情況。 以car物件舉
go語言使用之介面與繼承的區別
本篇文章介紹go語言中,面向物件程式設計中繼承與介面的區別。通過案列剖析,進一步加深對兩者理解。 一、go語言的面向物件程式設計概述 我對於Go語言面向物件程式設計理解有以下五點: 1、Golang支援面向物件程式設計(OOP[object orien
Maven之聚合與繼承
1.聚合 <project> <modelVersion>4.0.0</modelVersion> <groupId></groupId> <artifactId></artifactId&g
Python 進階_OOP 面向物件程式設計_組合與繼承
#目錄 前言 我們定義一個類是希望能夠把類當成模組來使用,並把類嵌入到我們的應用程式碼中,與其他的資料型別、邏輯執行流結合使用。一般來說我們可以使用兩種方法在程式碼中利用類,那就是組合和派生。 組合 組合: 就是將不同的類混合並加入到其他
構建之法閱讀隨筆一
什麽 的人 超級 年輕人 他也 工作效率 隨筆 批評 那是 《構建之法》一書已完成了第一遍的閱讀,接下來,我將隨機抽取其中的一段進行精讀。 移山公司的項目進行了一段時間,TFS上也積累了不少數據。大栓做了“數據挖掘”,整理出來一些統計信息,向各位領導匯報。 大牛:哇!前端組
06需求工程軟件建模與分析閱讀筆記之六
情況 標記 細節 客戶 管理 優先級 交叉引用 術語 重復 此次閱讀了解到了優秀需求規格說明書文檔的特性。 1、完備性:需求規格說明文檔是完備的,當且僅當:(1)描述了用戶所有有意義的需求,包括功能、性能、約束、質量屬性和對外接口。(2)定義了軟件對所有的情況的所有實際輸入
《構建之法》第1、2、16章閱讀隨筆
圖片 概論 工程師 簡單的 .com 問題 答案 機票 單元 第一章:概論 有一個朋友問我:“你們軟件工程和計算機的課表差不多,你們有c有Java,他們也有,你們要學計算機組成原理,他們也要學,有什麽區別嗎?”大一我還真的無法回答,我只知道我們學費是他們三倍,但是學的課程差
python之路--day21--組合與封裝
color ice chan 函數 DC cor pla linux 方案 講在組合之前: 解決類和類之間代碼冗余問題有兩種解決方案:1,繼承 2,組合 1,繼承:描述的是類和類之間,什麽是什麽的關系,一種從屬關系 2,組合:描述的是類和類之間的關系。是一種
JS繼承之組合繼承
前面介紹了原型鏈繼承以及建構函式繼承,它們都有各自的優缺點 特點 優點 缺點 原型鏈繼承 子類原型prototype對父類例項化來實現 子類不僅僅可以訪問父類原型上的