天天看點

《Java 開發從入門到精通》—— 1.2 面向對象

本節書摘來異步社群《java 開發從入門到精通》一書中的第1章,第1.2節,作者: 扶松柏 , 陳小玉,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

《Java 開發從入門到精通》—— 1.2 面向對象

   知識點講解:CD光牒:視訊ppt講解(知識點)第1章面向對象.mp4

在具體學習java語言之前,需要先弄清楚什麼是面向對象,面向對象思想是學好java語言的前提。在講解java語言的具體文法知識之前,先和大家一起學習面向對象的基本知識。

在目前的軟體開發領域有兩種主流的開發方法,分别是結構化開發方法和面向對象開發方法。早期的程式設計語言如c、basic、pascal等都是結構化程式設計語言,随着軟體開發技術的逐漸發展,人們發現面向對象可以提供更好的可重用性、可擴充性和可維護性,于是催生了大量的面向對象的程式設計語言,如c++、java、c#和ruby等。

面向對象程式設計即oop,是object-oriented programming的縮寫。面向對象程式設計技術是一種起源于20世紀60年代的simula語言,其自身理論已經十分完善,并被多種面向對象程式設計語言(object-oriented programming langunianling,oopl)實作。由于很多原因,國内大部分程式設計人員并沒有很深的oop以及oopl理論,很多人從一開始學習到工作很多年都隻是接觸到c/c++、java等靜态類型語言,而對純粹的oop思想以及動态類型語言知之甚少。

對象的産生通常基于兩種基本方式,分别是以原型對象為基礎産生新對象和以類為基礎産生新對象。

原型模型是以一個有代表性的對象為基礎來産生各種新的對象,并由此繼續産生更符合實際應用的對象。而原型—委托也是oop中的對象抽象,是代碼共享機制中的一種。

一個類提供了一個或多個對象的通用性描叙。從形式化的觀點看,類與類型有關,是以,一個類相當于是從該類中産生的執行個體的集合。

面向對象程式設計方法學是java程式設計的指導思想。在使用java進行程式設計時,應該首先利用對象模組化技術(omt)來分析目标問題,抽象出相關對象的共性,對它們進行分類,并分析各類之間的關系;然後再用類來描述同一類對象,歸納出類之間的關系。coad和yourdon在對象模組化技術、面向對象程式設計和知識庫系統的基礎之上設計了一整套面向對象的方法,具體來說分為面向對象分析(ooa)和面向對象設計(ood)。對象模組化技術、面向對象分析和面向對象設計共同構成了系統設計的過程,如圖1-1所示。

《Java 開發從入門到精通》—— 1.2 面向對象

在進行對象模組化、面向對象分析和設計的過程中,需要使用模組化語言來描述分析的過程和結果。統一模組化語言即uml,是unified modeling langunianling的縮寫。uml是為了實作上述目标而設計的一種标準通用的設計語言。

uml為我們提供了多種類型的模型描述圖,當在某種給定的方法學中使用這些圖時,人們就能更容易了解和交流設計思想。uml圖可以分為如下3種類型。

(1)靜态圖。

靜态圖即static diagram,其功能是描述了不發生任何變化的軟體元素的邏輯結構,描繪了類、對象和資料結構及其存在于它們之間的關系。

(2)動态圖。

動态圖即dynamic diagram,其功能是展示軟體實體在運作期間的的變化,主要描繪了執行流程、實體改變狀态的方式。

(3)實體圖。

實體圖即physical diagram,其功能是顯示軟體實體不變化的實體結構,主要用來描繪庫檔案、位元組檔案和資料檔案等,以及存在于它們之間的互相關系。

在java中,通常使用類圖和對象圖來表示項目内程式類的結構和各元素間的對應關系。在下面的内容中,将簡要介紹類圖和對象圖的基本知識。

(1)類圖。

類圖表示不同的實體間的互相關系,顯示了系統的靜态結構。類圖可用于表示邏輯類,邏輯類通常是指事物的種類,比如球隊、電影之類的抽象描述。類圖還可以用于表示實作類,實作類就是程式員要編寫的類。實作類圖與邏輯類圖可能會用來描述一些相同的類。然而,實作類圖與邏輯類圖不會使用相同的描述屬性。

類圖通常用矩形表示,并在矩形内将類分為3個部分。其中最上面的部分顯示類的名稱,中間部分顯示類的屬性,最下面的部分顯示類的方法,例如圖1-2所示的格式。

《Java 開發從入門到精通》—— 1.2 面向對象

注意:在現實應用中,最常用、最簡單的類圖就是一個在裡面顯示了類名的長方形。在大多數的uml中,多數類隻要有一個能夠清楚表達的命名就可以了。

在類名部分還可以顯示類的構造類型,類的構造型在雙角括符号“« »”之間指定,并放在類的名稱上面。常見的構造類型包括如下3類。

實作類:直接顯示類的名稱。

接口:在類名上方的雙角括符号“« »”内顯示。

工具類:在類名上方的雙角括符号“« »”内顯示。

如果類名用斜體表示,或者在類名下面,則表示這個類是一個抽象類。

在屬性和方法的前面可以用修飾符“+”或“-”,其功能是表示屬性或方法的作用域,具體說明如下所示。

修飾符“-”:表示屬性或方法是私有的(private)。

修飾符“#”:表示屬性或方法是保護的(protected)。

修飾符“+”:表示屬性或方法是公用的(public)。

通常在類的屬性或方法參數名稱的冒号後,顯示了屬性的類型或方法的參數的類型。方法的傳回值類型顯示在方法後面的冒号之後。

例如圖1-3顯示了一個lei類的類圖結構。

《Java 開發從入門到精通》—— 1.2 面向對象

(2)對象圖。

對象圖的功能是用來表示類的執行個體化對象。通常用一個兩層的矩形結構來表示對象圖,其中上層辨別對象名和類名,下層辨別對象的執行個體化屬性值。例如在下面的代碼中,建立了一個lei類的對象mm。

<code>lei mm = new lei("mm", 'f', 24);</code>

上述mm對象的對象圖如圖1-4所示。

《Java 開發從入門到精通》—— 1.2 面向對象

在同一個應用項目中,類之間可能存在如下多種類别的互相關系。

繼承:即inheritance,是指一個類從其父類派生而來,繼承了父類的屬性和方法。基于類的繼承叫做一般化(generalization),基于接口的繼承,叫做實作(realization)。

關聯:即association,類之間的關聯大多用來表示變量執行個體持有對其他對象的引用,這種關系是半永久的,并沒有包含關系。

依賴:即dependency,是不同類執行個體之間的暫時互相關系。

聚合:即aggregation,是關聯的一種特殊形式,代表着一種整體和部分的關系。并且裡面的部分可以作為其他整體的部分,而部分和整體之間也沒有生命期的依賴。

組合:即composition,是聚合的一種特殊形式。組合的關聯性比聚合更強,而部分隻能作為唯一的一個整體的部分,而且部分的生命周期依賴于整體的生命周期。

uml是一種設計語言,它的目的不是表現細節,而是表現結構,僅僅展示必要的細節。是以uml不可能與源代碼一一對應,隻是在結構上存在了某種對應關系。

除了前面介紹的類圖和對象圖外,在java中還可以使用序列圖和狀态圖來表示項目内程式類的結構和各元素間的對應關系。在下面的内容中,将對序列圖和狀态圖的基本知識進行簡要介紹。

(1)序列圖。

序列圖顯示具體用例(或用例的一部分)的詳細流程,它不但顯示了流程中不同對象之間的互動關系,而且還可以很詳細地顯示對不同對象的各種調用。在序列圖中有如下兩個次元。

垂直次元:以發生的時間順序顯示消息/調用的序列。

水準次元:顯示對象執行個體之間的互動。

對象之間的互動存在如下5種關系。

調用:即call,一個對象調用另一個對象(或本身)的方法。

傳回:即return,傳回一個值作為方法調用的結果。

發送:即send,一個對象給另一個對象(或本身)異步發送一個消息。

建立:即create,一個對象執行個體化另一個對象。

銷毀:即destroy,一個對象銷毀另一個對象(或本身)。

繪制序列圖的方法非常簡單,通常用圖頂部的框表示類的執行個體對象,框中的類執行個體名稱和類名稱之間用空格/冒号/空格來分隔。如果某個類執行個體向另一個類執行個體發送了處理消息,則繪制一條具有指向接收類執行個體的開箭頭的連線,并把處理的名稱放在連線上面。對于某些特别重要的消息,可以繪制一條具有指向發起類執行個體的開箭頭的虛線,将傳回值标注在虛線上。有助于序列圖的閱讀。

(2)狀态圖。

狀态圖表示某個類所處的不同狀态和該類的狀态轉換資訊。每個類都有狀态,但不是每個類都應該有一個狀态圖。隻有當行為的改變和狀态有關時才建立狀态圖。一般隻描述在系統活動期間具有3個或更多潛在狀态的類的狀态圖。

狀态圖中的符号集包括如下5個基本元素。

初始起點:使用實心圓來繪制。

狀态轉換:使用帶箭頭的線段來繪制。

目前狀态:使用圓角矩形來繪制。

判斷點:使用空心圓來繪制。

一個或者多個終止點:使用内部包含實心圓的圓來繪制。

在繪制狀态圖時,首先需要繪制起點和一條指向該類的初始狀态的轉換線段。狀态本身可以在圖上的任意位置繪制,然後隻需使用狀态轉換線條将它們連接配接起來。

對象模組化技術源于通用電氣公司的一套系統開發技術,是以面向對象的思想為基礎,通過對問題進行抽象而構造出一組相關的模型。通過對象模組化技術,可以全面地描述問題領域的結構。對象模組化技術把分析時收集到的資訊構造在如下3類模型中。

功能模型:功能模型定義系統做什麼。

對象模型:對象模型定義系統對誰做。

動态模型:動态模型定義系統如何做。

通過上述3個模型,可以從不同的角度對系統進行描述,首先分别着重于系統的某個側面,然後整體組合起來構成對系統的完整描述。

功能模型的功能是實作系統内部資料的傳送和處理。功能模型能夠說明,從輸入資料能夠計算出什麼樣的輸出資料,但是,沒有考慮參加計算的資料按什麼時序來執行。功能模型由多個資料流圖組成,它們指明從外部輸入,通過操作和内部存儲,直到外部輸出的整個資料流情況。功能模型還包括了對象模型内部資料間的限制。功能模型中的資料流圖往往形成一個層次結構,一個資料流圖的過程可以由下一層的資料流圖作進一步的說明。uml中通常使用用例圖和活動圖來描述功能模型。

建立功能模型的主要步驟如下所示。

(1)确定輸入和輸出值。

(2)用資料流圖表示功能的依賴性。

(3)具體說明每個具體功能。

(4)确定限制。

(5)确定功能優化的準則。

上述操作的具體實作流程如圖1-5所示。

《Java 開發從入門到精通》—— 1.2 面向對象

對象模型的功能是描述系統的靜态結構,包括類和對象,它們的屬性和操作,以及它們之間的關系。構造對象模型的主要目的是,發掘與項目應用密切相關的概念。對象模型用包含對象和對象之間關系的圖來表示,在uml中通常使用類圖和對象圖來描述對象模型。

使用omt建立對象模型的主要步驟如下所示。

(1)确定對象類。

(2)定義資料詞典,并利用它來描述類的屬性和類之間的關系。

(3)用繼承來組織和簡化類的結構和類之間的關系。

(4)測試通路路徑。

(5)根據對象之間的關系和對象的功能将對象分組建立子產品。

上述操作的具體實作流程如圖1-6所示。

《Java 開發從入門到精通》—— 1.2 面向對象

動态模型主要用于控制系統的邏輯,考察在任何時候對象及其關系的改變,描述這些涉及時序和改變的狀态。通常使用狀态圖和事件跟蹤圖來描述動态模型。

狀态圖是狀态和事件以及它們之間的關系所形成的網絡,側重于描述每一類對象的動态行為。而事件跟蹤圖則側重于說明系統執行過程中的一個特點場景,描述完成系統某個功能的一個事件序列。

對象到對象的單個消息叫做一個事件。在系統的一個特定環境下發生的一系列事件叫做一個場景。場景通常起始于一個系統外部的輸入事件,結束于一個系統外部的輸出事件。在一個場景中,一系列事件和交換事件的對象都可以放在一個事件跟蹤圖中表示。uml使用狀态圖和序列圖來描述動态模型,序列圖對應于事件跟蹤圖。

建立動态模型的主要步驟如下所示。

(1)預制典型的互動序列場景。

(2)确定對象之間的事件,為每個場景建立事件跟蹤圖。

(3)為每個系統預制一個事件流圖。

(4)為具有重要動态行為的類建立狀态圖。

(5)檢驗不同狀态圖中共享的事件的一緻性和完整性。

上述操作的具體實作流程如圖1-7所示。

《Java 開發從入門到精通》—— 1.2 面向對象

面向對象分析屬于軟體開發過程中的問題定義階段。傳統的系統分析産生一組面向過程的文檔,定義目标系統的功能;面向對象分析則産生一種描述系統功能和問題領域的基本特征的綜合文檔。

java中面向對象的分析需要遵循下面的原則。

(1)抽象。

從許多事物中舍棄個别的、非本質的特征,抽取共同的、本質性的特征,這就是抽象。抽象是形成概念的必要手段。抽象原則具有如下兩點意義。

盡管問題域中的事物是很複雜的,但是分析員并不需要了解和描述它們的一切,隻需要分析研究其中與系統目标有關的事物及其本質性特征。

通過舍棄個體事物在細節上的差異,抽取其共同特征而得到一批事物的抽象概念。

抽象是面向對象方法中使用最為廣泛的原則,抽象原則包括過程抽象和資料抽象兩個方面。

過程抽象:任何一個完成确定功能的操作序列,使用者都可以把它看成一個單一的實體,盡管實際上它可能是由一系列更低級的操作完成的。

資料抽象:根據施加于資料之上的操作來定義資料類型,并限定資料的值隻能由這些操作來修改和觀察。資料抽象是面向對象分析的核心原則。它強調把資料(屬性)和操作(服務)結合為一個不可分的對象,對象的外部隻需要知道它做什麼,而不必知道它如何做。

(2)封裝。

封裝就是把對象的屬性和服務結合為一個不可分的系統機關,并盡可能隐蔽對象的内部細節。

(3)繼承。

特殊類的對象擁有的其一般類的全部屬性與服務,這是特殊類對一般類的繼承。在面向對象分析中運用繼承原則,就是在每個由一般類和特殊類形成的結構中,把一般類的對象執行個體和所有特殊類的對象執行個體都共同具有的屬性和服務,一次性地在一般類中進行顯式定義。在特殊類中不再重複地定義一般類中已定義的東西,但是在語義上,特殊類卻自動地、隐含地擁有它的一般類(以及所有更上層的一般類)中定義的全部屬性和服務。繼承原則的好處是:使系統模型比較清晰。

(4)分類。

分類就是把具有相同屬性和服務的對象劃分為一類,用類作為這些對象的抽象描述。分類原則實際上是抽象原則運用于對象描述時的一種表現形式。

(5)聚合。

聚合的原則是:把一個複雜的事物看成若幹比較簡單的事物的組裝體,進而簡化對複雜事物的描述。

(6)關聯。

通過一個事物聯想到另外的事物,能使人發生聯想的原因是事物之間确實存在着某些聯系。

(7)消息通信。

這一原則要求對象之間隻能通過消息進行通信,而不允許在對象之外直接地存取對象内部的屬性。通過消息進行通信是由于封裝原則引起的。在ooa中要求用消息連接配接表示出對象之間的動态聯系。

(8)粒度控制。

考慮某部分的細節時暫時撇開其餘的部分,這就是粒度控制原則。

面向對象分析的過程分為兩個階段,分别是問題領域分析和應用分析,這兩個階段的具體說明如下所示。

(1)問題領域分析階段。

問題領域分析是軟體開發的基本組成部分,目的是使開發人員了解問題領域的結構,建立大緻的系統實作環境。問題領域分析給出一組抽象概念作為特定系統需求開發的參考。問題領域分析實際上是一種學習過程。軟體開發人員在這個階段應該盡可能地了解目前系統中與應用有關的知識,放寬考慮的範圍,盡可能地辨別與應用有關的概念。有了廣泛的問題領域知識,涉及具體的應用時,就可以更快地進入狀态,掌握應用的核心知識。而且,在使用者改變對目标系統的需求時,廣泛的分析可以幫助我們預測出目标系統在哪些方面會發生哪些變化。在分析過程中,應該辨別出系統的基本概念(對象、類、方法、關系等)、識别問題領域的特征,并把這些概念內建到問題領域的模型中。問題領域的模型必須包含概念之間的關系,以及每個概念的全部資訊。辨別出來的相關概念應該根據資訊内容來有機地融合到問題領域的綜合視圖中。

(2)應用分析階段。

應用分析是依據在問題領域分析時建立起來的問題領域模型來進行的。應用分析時,把問題領域模型用于目前特定的應用之中。首先,通過收集到的使用者資訊來對問題領域進行取舍,把使用者需求作為限制條件來使用,以縮減問題領域的資訊量。是以,問題領域分析的視野大小直接影響到應用分析保留的資訊量。一般來說,問題領域分析階段産生的模型并不需要用程式設計語言來表示,而應用分析階段産生的影響條件則需要用某種程式設計語言來表示。模型識别的要求可以針對一個應用,也可以針對多個應用。通常我們着重考慮兩個方面,即應用視圖和類視圖。在類視圖中,必須對每個類的屬性和操作進行細化,并表示出類之間的互相作用關系。

面向對象分析需要完成如下兩個目标。

(1)形式化地說明所面對的應用問題,最終形成軟體系統基本構成的對象,以及系統所必須遵從的、由應用環境所決定的規則和限制條件。

(2)明确地規定構成系統的對象如何協同工作和完成指定的功能。

通過面向對象分析所建立的系統模型是以概念為中心的,是以稱為概念模型。概念模型由一組相關的類組成。面向對象分析可以通過自頂向下地逐層分解來建立系統模型,也可以自底向上地從已經定義的類出發,逐漸構造新的類。

概念模型的構造和評審由如下5個層次構成。

類和對象層。

屬性層。

服務層。

結構層。

主題層。

上述5個層次不是構成軟體系統的層次,而是分析過程中的層次。當5個層次的工作全部完成時,面向對象分析的任務也就完成了。

注意:在實際程式設計操作中,面向對象分析的目标是得出問題領域的功能模型、對象模型和動态模型,并用相應的uml圖将它們表示出來。

經過前面的分析處理後,接下來就可以進行具體設計了。面向對象設計的任務是對面向對象分析的結果進行規範化整理,以便能夠被面向對象程式設計直接接受。在接下來的内容中,将簡要介紹面向對象設計的基本知識。

面向對象設計是一種軟體設計方法,是一種工程化規範。面向對象設計中主要的操作如下所示。

确定需要的類。

給每個類提供一組完整的操作。

明确地使用繼承來表現共同點。

是以說,面向對象設計就是一個根據需求決定所需的類、類的操作,以及類之間關聯的過程。

從面向對象分析到面向對象設計是一個逐漸擴充模型的過程。面向對象分析以實際問題為中心,可以不考慮與軟體實作相關的任何問題,主要考慮“做什麼”的問題;面向對象設計則是面向軟體實作的實際開發活動,主要考慮“怎麼做”的問題。

面向對象設計的目标是管理程式内部各部分的互相依賴關系。為了達到這個目标,面向對象設計要求将程式分成塊,然後分别将各個塊隐藏在接口(interface)的後面,讓它們隻通過接口互相交流。比如說,如果用面向對象設計的方法來設計一個用戶端—伺服器應用,那麼伺服器和用戶端之間不應該有直接的依賴,而是應該讓伺服器的接口和用戶端的接口互相依賴。

面向對象設計所要遵循的原則如下所示。

(1)子產品化。

面向對象開發方法很自然地支援了把系統分解成子產品的設計原則:對象就是子產品。它是把資料結構和操作這些資料的方法緊密地結合在一起所構成的子產品。

(2)抽象。

面向對象方法不僅支援過程抽象,而且支援資料抽象。

(3)資訊隐藏。

在面向對象方法中,資訊隐藏通過對象的封裝性來實作。

(4)低聯系。

在面向對象方法中,對象是最基本的子產品,是以,聯系主要指不同對象之間互相關聯的緊密程度。低聯系是設計的一個重要标準,因為這有助于使得系統中某一部分的變化對其他部分的影響降到最低。

面向對象設計有如下3個任務。

(1)對象定義規格的求精。

對于面向對象分析所抽象出來的對象、類,以及彙集的分析文檔,面向對象設計需要有一個根據設計要求整理和求精的過程,使之更能符合面向對象程式設計的需要,具體實施如下。

根據面向對象的概念模型整理分析所确定的對象結構、屬性、方法等内容,改正錯誤的内容,删去不必要和重複的内容等。

進行分類整理,以便于下一步資料庫設計和程式處理子產品設計的需要,整理的方法主要是進行歸類,對類、對象、屬性、方法和結構、主題進行歸類。

(2)資料模型和資料庫設計。

資料模型的設計需要确定類、對象屬性的内容、消息連接配接的方式、系統通路、資料模型的方法等。最後,每個對象執行個體的資料都必須落實到面向對象的庫結構模型中。

(3)優化。

面向對象設計的優化設計過程是從另一個角度對分析結果和處理業務過程的整理歸納,優化包括對象和結構的優化、抽象、內建。

面向對象設計的過程,是通過利用設計階段中的4個層次來建立系統的問題領域、使用者界面、任務管理和資料管理的過程。

(1)問題領域。

問題領域包括與我們所面對的應用問題直接相關的所有類和對象。主要是根據需求的變化來對面向對象分析階段産生的模型中的類和對象、結構、屬性和操作進行組合和分解,根據面向對象設計原則來增加必要的類、屬性和關系。

(2)使用者界面。

通常在面向對象分析階段給出了所需的屬性和操作,在面向對象設計階段必須根據需求把互動的細節加入使用者界面的設計中,包括有效的人機互動所必需的實際顯示和輸入。

使用者界面部分的設計主要由以下7個方面組成:

使用者分類。

描述人及其任務的腳本。

設計指令層。

設計詳細的互動。

繼續擴充使用者界面原型。

設計人機互動類。

根據圖形使用者界面進行設計任務管理部分的設計。

(3)任務管理。

任務是程序的别稱,是執行一系列活動的一段程式。當系統中有許多并發行為時,需要依照各個行為的協調和通信關系來劃分各種任務,以簡化并發行為的設計和編碼。任務管理主要包括任務的選擇和調整。

(4)資料管理。

資料管理提供了在資料管理系統中存儲和檢索對象的基本結構,包括對永久性資料的通路和管理。資料管理的方法主要有3種,分别是檔案管理、關系資料庫管理,以及面向對象的資料庫管理。

java是一門純粹的面向對象的程式設計語言,完全支援封裝、繼承和多态這三大面向對象的基本特征。java程式的組成機關就是類,不管什麼規模的java應用程式,都是由一個個類組成的。

在java語言中,除了8個基本資料類型值之外都是對象,對象就是面向對象程式設計的中心。對象是人們要進行研究的任何事物,從最簡單的數字到複雜的航空母艦等均是對象。對象不僅能表示具體的事物,而且還能表示抽象的規則、計劃或事件。對象是具有狀态的,一個對象用資料值來描述它的狀态。java通過為對象定義field(以前常被稱為屬性,現在也稱為字段)來描述對象的狀态。對象也具有操作,這些操作可以改變對象的狀态,對象的操作也被稱為對象的行為,java通過為對象定義方法來描述對象的行為。對象實作了資料和操作的結合,使資料和操作封裝于對象的統一體中。對象是java程式裡的核心,是以,java裡的對象具有唯一性,每個對象都有一個辨別來引用它,如果某個對象失去了辨別,這個對象将變成垃圾,隻能等着系統垃圾回收來回收它。java語言不允許直接通路對象,而是通過對對象的引用來操作對象。

具有相同或相似性質的一組對象的抽象就是類,類是抽象的、概念上的定義,是對一類事物的描述。對象是實際存在的該類事物的每個個體,因而也稱執行個體(instance)。對象的抽象是類,類的具體化就是對象,也可以說類的執行個體是對象。類用來描述一系列對象,類會概述每個對象應包括的資料,類概述每個對象的行為特征。是以,我們可以把類了解成某種概念、定義,它規定了某類對象所共同具有的資料和行為特征。

java語言使用關鍵字class來定義一個類,java允許程式員自定義類。在java中定義類時,可使用關鍵字field來描述該類對象的資料,可使用方法來描述該類對象的行為特征。類的行為特主要是指屬性和操作,具體說明如下所示。

java中的類具有屬性,它是對象狀态的抽象,用資料結構來描述該類對象的共同資料特征。

java中的類具有操作,它是對象行為的抽象,用操作名和實作該操作的方法來描述該類對象的共同行為。

在客觀世界中有若幹類,這些類之間有一定的結構關系。通常有如下兩種主要的結構關系。

一般—特殊結構:也被稱為分類結構,這種分類結構關系就是典型的繼承關系,java語言使用關鍵字extends來表示這種分類結構,java的子類是一種特殊的父類。是以,這種“一般—特殊”結構關系其實是一種“is a”關系。

整體—部分結構:也被稱為組裝結構,這種分類關系就是典型的組合關系,java語言通過在一個類裡儲存另一個對象的引用來實作這種組合關系,是以這種“整體—部分”結構關系其實是一種“has a”關系。

程式員在定義java類之後,就可以使用關鍵字new來建立指定類的對象,每個類可以建立任意多個對象,多個對象的field值可以不同,這表現為不同對象的資料存在差異。