圖說Java中的OOPs(面向對象編程系統)基本概念

2020-12-06 ramostear

面向對象編程是一種編程概念,其核心思想是允許用戶創建所需要的對象,然後提供處理這些對象的方法,使用者通過操作對象而獲得運算數據。

本文將以簡潔的方式對面向對象編程中的概念進行梳理。

1. Class(類)

你可以將類理解為對一組相似實體的統稱。類只是一個邏輯組件,並不是具體的物理實體。例如,你可以創建一個名為「Bird」的鳥類,則它可能包含烏鴉,喜鵲,麻雀,鸚鵡等對象。其屬性(數據)可以是這些鳥的顏色,體重或者身高。除此之外,你還可以為鳥類提供飛行,捕食,鳴叫等方法。

2. Object(對象)

你可以將對象理解為類的一個實例或者具體的一個個體。在Java中一個類可以有多個對象實例,但一個對象實例只能對應一個類。對象既包含數據又包含對數據進行操作的方法。例如,我們日常生活中能夠體現具體物理事物的鋼筆,電腦桌,顯示器,自行車,玻璃杯等等。

3. Inheritance(繼承)

繼承是Java中的一種機制,它允許其中一個對象獲取父對象的所有屬性和行為(方法)。他是面向對象編程系統(OOPS)的重要組成部分。Java繼承的思想是可以創建基於現有類的新類。從現有類繼承時,可以重用父類的欄位和方法。除此之外,你還可以在當前類中添加新的欄位和方法。

在Java中,類的繼承可以分為三種:單繼承,多繼承和分層繼承。但需要注意的是,這裡提到的多繼承是相對於被繼承類而言的,Java中不允許一個類繼承多個類。Java中的多重繼承可以通過接口來實現。

4. Polymorphism(多態)

簡單來說,多態是指類的屬性和方法在不同的對象實例中具有不同的表現形式。例如,在Animal(動物)類中有一個speak()方法,在不同的對象實例中,如狗的speak()是「汪汪~」,貓的speak()是「喵喵~」,牛的speak()是「哞哞~」,羊的speak()是「咩咩~」等等。

5. Abstraction(抽象)

抽象是指只表示一個類的基本特徵而隱藏其內部細節的行為。例如,我們可以把汽車抽象為一個具備發動機,輪子,方向盤,剎車,變速箱,座椅等部件的物體,但發動機是幾缸的,加汽油還是柴油,變速箱是手動還是自動,座椅是帶加熱還是不帶加熱的等細節我們不去關心,僅僅描述一臺汽車的基本特徵即可。

6. Encapsulation(封裝)

簡單來說,封裝是一種將代碼和數據包裝到一個單元中的OOP技術。在OOPs概念中,一個類的變量始終對其他類隱藏,想要獲取類中的變量,只能使用當前類提供的方法對其進行訪問。我們以膠囊藥物為例,基本上,膠囊封裝了藥物的幾種組合,如果藥物的組合看成是變量和方法的,則膠囊將充當一個類,使用膠囊包裹藥物的過程則稱為封裝。

7. Association(關聯)

關聯是指兩個對象之間存在某種聯繫,它定義了對象之間的多樣性。例如,學生與老師之間存在著關聯,學生上老師的課,老師教學生知識。在Java中,關聯關係可以有一對一關聯,一對多關聯,多對多關聯和多對一關聯。

8. Aggregation(聚合)

聚合是關聯的一種特定情況,屬於關聯的子集。與繼承不同的是聚合表示一種「has-a」的關係,而繼承表示一種「is-a」的關係。以汽車為例子,一臺車子由發動機,變速箱,外殼,輪子,剎車系統等組成。在這種模式中,父類的生命周期結束,不會影響到子類的生命周期,換而言之,在聚合中,每個對象都有自己的生命周期,例如,一輛汽車被拆卸開後,器發動機,大燈,方向盤,輪子,座椅等子部件仍然還能正常工作。

9. Composition(組合)

組合是聚合的一種特殊關係,它表現為整體與局部具有某種「死亡契約」。當整體的生命周期結束時,局部的生命周期也隨之結束。例如,我們以人為例,人簡單的可概括為由頭,手,腳和軀幹四個部分組成,當人死亡時,組成人的這四個部分也隨之死亡。也就是說,局部不能離開整體而單獨工作。

大部分剛剛接觸面向對象編程的同學都會被關聯,聚合和組合這三種關係搞暈,這裡簡單的總結一下這三者之間的關係。

10. 關聯,聚合和組合之間的異同

一般地,關聯是一種非常通用的術語,用於表示一個類何時使用另一個類提供的功能。如果一個父類對象擁有另一個子類對象並且如果父類對象生命周期結束子類對象也無法正常工作時,則稱為組合,反之則稱為聚合。

相關焦點

  • 跟我學java編程—面向對象編程多態概念的理解
    例1:在父類的基礎上增加新的行為在『深入了解面向對象的繼承思想』一節中,給出了一個案例,案例內容及案例代碼參見『深入了解面向對象的繼承思想』一節。其實,還有一種解決方案,在EBook類中重寫父類的outProduct(),這樣當EBook對象調用outProduct()方法時,其父類的outProduct()方法被忽略,而執行EBook類的outProduct()方法。代碼如下:例2給出的子類重寫父類的方法,就是面向對象的多態概念。
  • Java面向對象之接口——interface
    Java面向對象之接口——interface什麼是接口一般計算機中的接口分為對於同一種型號的主板上的多個USB插槽,他們有相同的數據交換方式,相同的實現細節;在面向對象的思想中,可認為他們都是同一個類的不同實例,也就是說插槽是USB規範的實例。
  • 跟我學java編程—理解Java語言的抽象與對象
    面向對象編程思想的一個基本方法就是抽象。抽象是從眾多的同類事物中抽取出具有共同特徵的過程及方法。類是抽象出來的事物,現實生活中並不存在,例如水果,水果是人們賦予具有蘋果、香蕉、葡萄等共同特點的名稱,不單指某一事物;對象是指具體的實物或概念,例如蘋果、香蕉、葡萄等對象是實物,而一項政策可能就是一個概念性的對象了,在現實生活中,萬事萬物皆對象,面向對象編程就是模擬現實生活中的一個個對象來編程的。
  • 面向對象編程的災難:是時候考慮更新換代了!
    框架的抽象定義是:「一個基本的支持結構」——框架關注更抽象的東西,比如代碼組織和處理代碼複雜性。儘管面向對象編程和函數編程都是編程範例,但它們也是高級框架。限制我們的選擇c++是一種可怕的[面向對象]語言……將你的項目限制為C意味著人們不會用任何愚蠢的「對象模型」來把事情搞砸。
  • 面試頻率最高的簡單問題——Java類的三大基本特徵
    類中的私有數據在類的外部不能直接使用,外部只能通過類的公共接口方法(函數)來處理類中的數據,從而保證數據的安全。封裝的目的是增強安全性和簡化編程,僅需要通過外部接口,特定的訪問權限來使用類的成員。類設計好以後,就可以實例化該對象。對象形成時,也界定了對象與外界的內外界限。
  • 開發崗位這麼多,為什麼選Java?你學Java了嗎-開課吧
    TIOBE編程排行榜根據全球工程師、課程和搜尋引擎數量為指數得出,在一定程度上反映了程式語言的發展趨勢。其他程式語言與Java相比,Java語法相對簡單,並且是很多計算機語言的基礎。提到C++語言,很多人發現在使用過程中最容易出現的錯誤就是內存管理,而java有自動垃圾回收器,不用擔心內存。
  • 跟我學java編程—深入理解面向對象的繼承思想
    繼承是面向對象設計的重要思想,其核心是代碼的復用和程序功能高度的擴展性。繼承在詞典中的解釋是把前人的知識、文化、思想、財產、知識等接受過來。在面向對象中,繼承是對類而言的,新類可以繼承已有類的屬性和方法,這樣做的好處是新類可以復用原有類所有的代碼,復用的同時又可以定義新的方法和屬性來擴展原有類的功能。為了理解繼承思想,下面看一個案例。某出版機構準備要通過微信小程序實現產品在微信媒體的推廣和銷售,出版機構的產品包括圖書、音頻、視頻,圖書又分為紙書和電子書。
  • JAVA面向對象的多態是個什麼東西?
    面向對象的三大特徵:封裝、繼承、多態。在前面已經說了過了封裝和繼承。今天就來聊聊剩下的多態。多態,從字面內容來看,就是多種形態,多種狀態。在java的面向對象中可以從以下兩個方面來講。於是我們同樣創建的動物的對象,同樣調用這個動物對象叫的方法,如果這個動物對象是貓,則會發出「喵喵」聲,而如果這個動物對象是狗,發出的聲音則成了「汪汪」。這就是不同之類之間體現出來的多態。在代碼上體現就是方法名稱,參數,返回值完全與父類相同,而不同的子類在方法體內的代碼邏輯不同。
  • Java面向對象之final、abstract抽象、和變量生命周期
    Java面向對象之final、abstract抽象、final修飾符final比如:基本數據類型的包裝類就是一個典型的例子。該類不會再被拓展。java裡final修飾的類有很多,比如八大基本數據類型的包裝類(Byte,Character、Short、Integer、Long、Float、Double、Boolean)和String等。
  • Java編程中基礎反射詳細解析
    類加載指的是將類的class文件讀入內存中,並為之創建一個 java.lang.Class對象,也就是說程序使用任何類的時候,都會為其創建一個class對象。1.2 類的連接類被加載之後,系統會為之生成一個Class對象,接著會進入連接階段,連接階段負責把類的二進位數據合併到JRE中。
  • Java基礎學習:java中的基本數據類型
    一、基本類型 1、基本類型 不使用New創建,聲明一個非引用傳遞的變量,且變量的值直接置於堆棧中,大小不隨運行環境變化,效率更高。使用new創建的引用對象存儲在堆中。
  • 在.NET中,C#舉例深度理解面向對象編程中的封裝、繼承和多態
    -面向對象編程1.什麼是面向對象編程?我們在沒有接觸類之前,所有的代碼都是堆在一起的,沒有面向對象的概念,但接觸了類/對象/繼承/接口之後,我們要建立自己的面向對象編程的概念,在編碼過程中,要讓自己編寫的程序是面向對象的,而不是堆代碼。微軟在.NET框架中推出的C#語言是面向對象的強類型程式語言。
  • 如何給女朋友解釋什麼是面向對象編程?
    女朋友拿著一本《面向對象編程》過來找我。什麼是面向對象?是要面向我寫代碼嗎?不是啦,這個面向對象的對象不是你這個對象啦。此時,我突然感受到了一股莫名的殺氣。什麼?你還有其他對象嗎?有我好看嗎?有我瘦嗎?不對。你不能有其他對象。
  • 詳解Java面向對象開發方法,看清華大牛帶你深入淺出剖析
    隨著軟體開發技術的逐步發展,為了進一步提高軟體的可重用性、可擴展性和可維護性,面向對象的程式語言及面向對象設計理論應運而生,Java語言就是一種純面向對象的程式語言。一般說來,軟體開發都會經歷以下生命周期:軟體分析:分析問題領域,了解用戶的需求。
  • 面向對象編程
    面向對象編程(OOP)對於初學者來說可能是一個很難理解的概念。很多書籍都是從解釋OOP開始,討論三大術語:封裝、繼承和多態性,但是解釋的效果往往讓人失望。本文希望讓程式設計師、數據科學家和python愛好者們更容易理解這個概念。我們去掉所有的行話,通過一些例子來做解說。這篇文章是關於解釋OOP的外行方式。
  • 世界排行第一的程式語言:java迎來25歲生日
    作為全球排名第一的程式語言,本周末Java將迎來 25 歲生日。Java起源於 1991 年的「 Oak」項目,由James Gosling領導。面向對象的Java以其「一次編寫,隨處運行」的可移植性而聞名,因為Java虛擬機支持多種硬體平臺和作業系統以及Java applet可以從網頁上運行。
  • 「JAVA」萬字長篇詳述字節碼對象與反射機制完成動態編程
    ,便會啟動JVM,將字節碼文件加載到JVM中,然後開始運行;當運行java命令時,該命令將會啟動一個JVM進程,在這個JVM進程中,會保存有該JVM創建的所有線程、變量、對象,這些線程、變量、對象會共享該JVM的內存區域。
  • Java面向對象之:封裝、繼承、多態
    私有化使其私有化,向外暴露public方法,保證調用者安全訪問,不會出現因為越界導致本不應該出現的問題出現;封裝的好處:調用者能夠正確、方便地使用系統功能,有效地防止調用者隨意修改系統屬性。,父類只希望被子類訪問的欄位和方法時;繼承從面向對象的角度上說,繼承是一種從一般到特殊的關係,是一種「is a」的關係,即子類是對父類的拓展,是一種特殊的父類,比如:狗是動物的一種特殊情況,狗屬於動物;在這個例子中,動物是父類,狗是子類,狗繼承了動物的特徵和行為,並在動物的特徵和行為的基礎之上拓展自己的特徵和行為
  • Unity遊戲開發:C Sharp進階之面向對象編程
    C進階之面向對象編程深入淺出的C#進階課程在了解C#基礎語法之上,進一步學習面向對象(OOP)編程技術和.NET框架,並深入講解在實踐中總結出的OOP設計理念。學完本課程,即可設計出優質的面向對象程序,並可在Unity中用C#來開發所有腳本。
  • 提升java編程性能優化知識 程式設計師必看這幾點
    2.儘量避免過多過常的創建Java對象  儘量避免在經常調用的方法,循環中new對象,由於系統不僅要花費時間來創建對象,而且還要花時間對這些對象進行垃圾回收和處理,在我們可以控制的範圍內,最大限度的重用對象,最好能用基本的數據類型或數組來替代對象。