Java 程式設計()  第九章 繼承性與多形性運用      下一頁

 

第九章 繼承性與多形性運用

9-1 類別的繼承性

內容:

9-1-1 何謂繼承性

製作一個類別之後,再由此類別產生另一個新的類別,新類別除了可以繼承原類別的變數及方法成員之外,還可以增加其他成員(變數或方法),這就是類別的『繼承性』。

類別產生物件之後是一個獨立的程式執行實體,這是實現軟體 IC 的基本概念。然而,結合多個類別成為另一功能更豐富軟體 IC,則需利用類別的繼承性來達成。也就是說,吾人可利用類別的繼承性將若干個類別整合成另一個功能較強的類別,再利用他產生的物件,此為物件導向程式設計的基本精神。另一方面,再透過 Java 可攜性的功能,任何系統發展出來的軟體 IC,都能輕易地移植到其他系統上執行。如此一來,將會有更多人願意發展軟體 IC 來銷售,整個軟體工業將因此而改觀。由此可見,類別繼承性在物件導向程式設計佔有舉足輕重的地位,本章將利用範例引導讀者,來認識繼承性的特性與運用。

9-1-2 繼承性的運用

我們再回來探討建構資訊系統的基本目的,即是欲將現有存在或虛擬不存在的種種現象,轉換成電子資料並且可由資訊系統來處理。如此不但可以將真實交易、處理、流通等等行為,轉換成電子化處理,達到提高時效以及增加交易行為的可靠度(資訊系統沒有情感也不會有詐欺行為)。

關鍵在於如何將真實環境數位化,傳統語言利用靜態的結構變數描述種種現象,但所描述的每一種實體都是獨立的,很難建立實體之間的共同連帶關係。任何一套電子資訊系統必須描述許多實體,在真實環境中這些實體之間有許多關聯,如果資訊環境中每種實體都各自獨立,當系統有任何變動或需擴充系統功能時,將非常的困難。

利用物件導向的概念描述則不然,產生一個物件後,可利用它再擴充成另外一個物件,即是新物件不再重新描述,只不過將舊的物件增加某些屬性或功能,保留舊物件的特性而產生新的物件。自然而然,新物件與舊物件就會保有許多連帶關係。從物件的功能性來談,是整合物件延伸另一個新的物件;從技術面來實現,即是整合多個類別擴充成另一個類別,這就是類別的繼承性。

我們用『人』的描述方法說明物件導向的設計模式。以台灣為範例,政府會針對每位國民給予適當的識別,方法是發給每位國民一張『國民身分證』,無論國人到任何地方洽公或需要表明身分時,只要『秀』出身分證大致上都能通行。在資料系統上,同樣需要紀錄每位國民的資料與身分識別,最簡單的方法即是將『國民身分證』資料轉換成電子檔,並允許利用資料系統儲存與處理,如圖 9-1 所示。

9-1 電子資料表示個人身分

9-1 係利用物件導向觀念來描述每位國民的身份資料,暫且不要去理會他的屬性是否能滿足資訊系統需求,反正官方認定的識別資料就是這樣。吾人利用 Personal.class 類別描述國人的基本資料,至於其他資訊系統所需的個人資料都由此延伸而來。如圖 9-2 所示,吾人可利用 Personal 類別擴充成學生 StudentEmployeeCustomer 等類別資料,當擴充成其他類別時,除了可以保持原類別屬性外,還可增加其他屬性來滿足所欲開發的資訊系統所需(如校務行政系統)。

9-1-3 繼承性的運用範例

以『展鵬網路行銷公司』為範例,他期望建立人事資訊系統,則可以引用 Personal 類別,再加某些公司所需的屬性,則得到 Employee 類別。Employee 類別是由 Personal 類別擴充(extends)而來,也得到 Personal 原來所擁有的屬性,則稱為 Employee 繼承了 Personal 所擁有的,這就是『繼承性』(如圖 9-2 所示)。

9-2 電子化系統的資料關聯

物件導向的繼承性不同於『田橋』分財產,分給大兒子,小兒子就沒有,而是複製下來的意思。Employee 繼承了 Personal 的所有屬性,同樣的,Customer 也可以再繼承它的所有屬性,StudentTeacher 類別亦可。一般公司行號的人事系統大多會紀錄較詳細的員工資料,其他系統大多由此系統內擷取出適用的資料即可,因此可由 Employee 擴充(也許是縮小)出 Sales Worker 類別,分別提供給業務系統與生產管理系統使用。由此可見,整個公司的員工資料都是來自 Employee 類別,不但可以節省開發時間、提高效率,也能使公司內資料統一。

9-1-4 類別繼承的語法

繼承類別的語法如下:(如圖 9-3 所示)

class new_class extends old_class {

class extends body

……

……

}

其中 class extends Java 的關鍵字。new_class 首先導入 old_class 的內容,並增加了 class extends body 所描述的部分。如此一來,new_class 不但具有 old_class 的特性(變數及方法),也擴充了自己的變數與方法(extends body 部分)。

9-3 父類別與子類別

類別繼承性的重點說明如下:

(1) 子類別繼承了父類別所有變數與方法成員,其屬性(如 publicprivate protected)也如同父類別一樣。

(2) 子類別除了繼承父類別之外,也可自行宣告所需的變數與方法成員

(3) 如果子類別所宣告的變數或方法與父類別相同名稱的話,則表示新的成員已覆蓋舊的成員(原父類別所擁有)。

(4) 成員有被覆蓋的情況下(如覆蓋成員的名稱為 name),也可利用 super this 來區分父類別成員(super.name)或子類別成員(this.name)。

(5) 子類別可以繼承兩個以上父類別,稱為多重繼承,必須採用 implement 關鍵子

 

翻轉工作室:粘添壽

 

Java 程式設計(二) 含物件導向

 

 

翻轉電子書系列: