1. 程式人生 > >Java組合和繼承的區別

Java組合和繼承的區別

   本文轉自:http://changbl.iteye.com/blog/2304492   作者:空蘭幽谷

組合和繼承是面向物件中兩種程式碼複用的方式。組合是指在新的類中建立原有類的物件,重複利用已有類的功能。繼承是面向物件的主要特徵之一,它允許設計人員根據其他類的實現來定義一個類的實現。組合和繼承都允許在新的類中設定子物件,只是組合是顯式的,而繼承則是隱式的。組合和繼承存在著對應關係:組合中的整體類和繼承中的子類對應,組合中的區域性類和繼承中的父類對應。

    二者的區別在哪裡呢?首先分析一個例項。Car表示汽車物件,Vehicle表示交通工具物件,Tire表示輪胎物件。三者的關係如圖所示。

    

 

    從圖中可以看出,Car是Vehicle的一種,因此是一種繼承關係(又被稱為“is - a”關係);而Car包含了多個Tire,因此是一種組合關係(又被稱為“has - a”關係)。其實現方式如下:

    繼承的實現方式:

Java程式碼  收藏程式碼
  1. class Verhicle{  
  2. }  
  3. class Car extends Verhicle{  
  4. }  

    組合的實現方式:

Java程式碼  收藏程式碼
  1. class Tire{  
  2. }  
  3. class Car extends Verhicle{  
  4.     private Tire t = new Tire();  
  5. }  

     既然繼承和組合都能實現程式碼的重用,那麼在實際使用時又該如何選擇呢?一般情況下,遵循以下兩點原則:

    1. 除非兩個類是“is - a”關係,否則不要輕易的使用繼承,不要單純的為了實現程式碼的重用而使用繼承,因為過多的使用繼承會破壞程式碼的可維護性。當父類被修改時,會影響到所有繼承自它的子類,從而增加程式的維護難度和成本。

    2. 不要僅僅為了實現多型而使用繼承。如果類之間沒有“is - a”關係,可以通過實現組合的方式來達到相同的目的。設計模式中的策略模式可以很好的說明這一點,採用介面和組合的方式比採用繼承的方式具有更好的可擴充套件性。

    由於Java語言只支援單繼承,如果想同時繼承多個類,在Java中是無法直接實現的。同時,在Java語言中,如果使用繼承過多,也會讓一個class裡的內容臃腫不堪。所以,在Java語言中,能使用組合就儘量不要使用繼承。

相關推薦

Java組合繼承區別

   本文轉自:http://changbl.iteye.com/blog/2304492   作者:空蘭幽谷 組合和繼承是面向物件中兩種程式碼複用的方式。組合是指在新的類中建立原有類的物件,重複利用已有類的功能。繼承是面向物件的主要特徵之一,它允許設計人員根據其他類的實現來定義一個類的實現。組合和繼承

組合繼承有什麼區別

組合和繼承是面向物件中兩種程式碼複用的方式。 1.組合定義 在新類裡面建立原有類的物件,重複利用已有類的功能。(has-a關係) 2.繼承定義 可以使用現有類的功能,並且在無需重複編寫原有類的情況下對原有類進行功能上的擴充套件。(is-a關係) 3.例項比較

[Java] 組合繼承區別

組合和繼承都允許在新的類中放置子物件,組合是顯式地這樣做,而繼承是隱式地做。 那兩者之間的區別是怎樣的呢?又該如何選擇呢? 很多人對組合理解地還不是很好,所以我們先來理解一下組合: 組合技術通常用於想在新類中使用現有類的功能而非它的介面這種情況。 以car物件舉例: /

[Java] 組合繼承區別

組合和繼承都允許在新的類中放置子物件,組合是顯式地這樣做,而繼承是隱式地做。 那兩者之間的區別是怎樣的呢?又該如何選擇呢? 很多人對組合理解地還不是很好,所以我們先來理解一下組合: 組合技術通常用於想在新類中使用現有類的功能而非它的介面這種情況。 以car物件舉

設計模式必須要弄明白的組合繼承

前言 ​ 哇,最近再看Java程式設計思想,看到了第七章複用類中7.5在組合和繼承之間選擇。讓我對組合和繼承有了新的認知,前一段時間把設計模式看完了,雖然說看了幾遍,但是思想永遠的記不住,理解不了。但是今天,結合著組合和繼承讓我有了新的認知,故想給學設計模式的同學一個我的理解思路。 組合和繼承 理

Java中 = += 的區別

1)+:在編譯器將右邊的表示式結果計算出來後,和左邊的變數型別比較精度,如果左邊的變數精度低於右邊的結果的精度,編譯器會顯式的報錯,告訴程式設計師去強制轉型。(所以s1 = s1 + 1出錯)最後將表示式的結果複製到變數所在的記憶體區。 2)+=:編譯器自動隱式直接將+=運算子後面的運算元強制裝

java中 +=+的區別

java中+=的意義包含兩部分,一是"+",就是通常所說的直接相加,二是改變結果的型別,將計算結果的型別轉換為"+=符號左邊的型別。 比如: shrot s=1; s+=1這個語句其實就是s=(short)(s+1)

maven專案目錄 Java Resources src區別

相關文章 使用maven管理java web專案時,我們往往會被eclipse上展示的目錄結構所迷惑,明明有個Java Resources包,為啥又冒出個src資料夾呢? 我們先看看整體的目錄結構: 經過對比,可以發現src下多了一個webapp資料夾

java-組合優於繼承

組合和繼承,都能實現對類的擴充套件。 區別如下表所示 組合 繼承 has-a關係 is-a關係 執行期決定 編譯期決定 不破壞封裝,整體和區域性鬆耦合 破壞封裝,子類依賴父類 支援擴充套件,隨意增加

Java程式設計:組合繼承代理的區別

組合、繼承和代理三者的定義: 組合:在新類中new 另外一個類的物件,以新增該物件的特性。 繼承:從基類繼承得到子類,獲得基類的特性。 代理:在代理類中建立某功能的類,呼叫類的一些方法以獲得該類的部分特性。 使用場合: 組合:各部件之間沒什麼關係,只需

java中接口繼承區別

inter pan 比較 TP s/4 定義 http nds 接口 實際概念區別:區別1:不同的修飾符修飾(interface),(extends)區別2:在面向對象編程中可以有多繼承!但是只支持接口的多繼承,不支持‘繼承‘的多繼承哦而繼承在java中具有單根性,子類只能

複用-組合繼承、代理區別用法

繼承主要有兩個作用: 1.為匯出類提供方法,這個特性在程式碼複用有比較多的應用 2.表現匯出類與基類之間的關係。這個特性在多型裡非常有用,後面會講到。 我們先來講為匯出類提供方法這個特性——繼承是程式碼複用中重要的一種方式,很難把它與複用割裂開看,而且放在一起比較似乎更容易理解繼承在為匯出類

Java程式碼複用的三種常用方式:繼承組合代理

複用程式碼是Java眾多引人注目的功能之一。這句話很通順,沒什麼問題,但問題在於很多人並不清楚“複用”是什麼。就好像我說“沉默王二是一個不止會寫程式碼的程式設計師”,唉,沉默王二是誰? 如果想學習Java工程化、高效能及分散式、深入淺出。微服務、Spring,MyBatis,Netty原始碼分析的朋友可以加

Java代碼復用的三種常用方式:繼承組合代理

是個 繼續 不想 完成 extend 工作 代碼復用 輕松 例如 復用代碼是Java眾多引人註目的功能之一。這句話很通順,沒什麽問題,但問題在於很多人並不清楚“復用”是什麽。就好像我說“沈默王二是一個不止會寫代碼的程序員”,唉,沈默王二是誰? 我們需要來給“復用”下一個定義

Java基礎_(執行緒篇_第一篇)】繼承Thread;實現runnable;sleep、wait用法區別;ThreadRunnable區別;執行緒停止

一、執行緒兩種實現 1.繼承Thread類: (1)【直接在主類繼承】 package org; // 繼承 Thread 類 public class TestThreadofExt extends Thread { private static int count =

java一個類 繼承HttpServlet 實現Servlet區別

servlet 是一個介面,如果實現這個介面,那麼就必須實現接口裡面定義的所有方法而HttpServlet實現了servlet介面,並把servlet介面中的方法實現了繼承Httpservelt實際上也就實現了servlet介面,但是我們沒必要再去實現servlet中定義的

java中ArrayListLinkedList區別

插入 list 新的 查找 arr tro 基於 列表 時間復雜度 ArrayList和LinkedList最主要的區別是基於不同數據結構 ArrayList是基於動態數組的數據結構,LinkedList基於鏈表的數據結構,針對這點,從時間復雜度和空間復雜度來看主要區別:

Java == ,equals hashcode 的區別聯系

應對 哈希表 返回對象 com 總結 子類 return 地址 內存 1. == java中的==是比較兩個對象在JVM中的地址。比較好理解。看下面的代碼: public class ComAddr{ public static void main(St

Java瘋狂講義》中關聯、組合聚合的謬誤

color 有意 sel 面向對象 cal chan nts uci 摘錄 本文參考例如以下資料(建議閱讀): a). difference-aggregation-acquaintance-and-composition-as-used-by-gang-of-f

Java多態機制繼承中重寫重載

htm uil 不同的 運行期 表現 決定 this targe 程序 關於Java中多態機制 http://www.cnblogs.com/chenssy/p/3372798.html 這篇博文講的很透徹 大體意思是 多態定義: 多態就是指程序中定義的引用變量所指向的具體