2013年8月7日 星期三

抽象類別

宣告為「抽象」的類別 Abstract Class 不能被 new 實體化,如果在程式中去 new 抽象類別,編譯階段就會出現錯誤訊息不給過。
抽象類別只是告知開發者,必須去實作那個類別,亦即:要去「繼承」抽象類別,並且實作子類別出來。

抽像類別唯一目的,就是:讓整個繼承結構更完整。讓"物件導向"更合理化。


舉個例子:

生物(界、門、綱、目、科、屬、種)

動物界、植物界

人類(動物界、脊索動物門、 哺乳綱、靈長目、人科)

abstract class 生物 {
abstract void 基因染色體 () ;
}

// 這個「生物」類別,被宣告為抽象的,無法直接 new,一定要繼承並實作才能使用。

// 它預先宣告了一個「抽象方法」:基因染色體。

// 抽象類別可以整個空白,也可以預先定義一些成員屬性、方法。


class 動物 extends 生物 { }

// 「動物」類別,繼承「生物」抽象類別

// 雖然這個「動物」類別沒有宣告 abstract 抽象,但因為沒有實作「抽象方法」,所以會自動成為「抽象類別」,亦即無法直接 new。

// 凡是子類別繼承「抽象類別」,沒有實作它裡面的「抽象方法」,就會自動成為抽象類別。


class 人類 extends 動物 {
void 基因染色體 (numOfDna) {
System.out.println ( "染色體有" + numOfDna + "對");

}

// 「人類」類別 繼承「動物」類別,並且實作了「抽象方法」,這個類別是可以 new 的。



也許你會覺得奇怪,沒事搞這麼複雜幹嘛?

直接一個「人類」類別不就得了,幹嘛上層還用什麼「生物」「動物」抽象類別?吃飽撐著?

這樣講也是沒錯,所以抽象類別一般很少使用....

但有些人比較龜毛,非得要整個 OO 結構合理完整化。這有助於邏輯思路。

不過其實這才是真正意義上的 OO,因此 JAVA 提供了抽象類別。

另一種用途是:大團隊合作,起先企劃的人,想到一些點子,但是如何實作,企劃的人不管,他只是先行企劃一個大概方向,實作的細節交給其他合作的夥伴去解決。所以企劃就先宣告一些抽象類別,合作的夥伴再去實作細節。分工合作這樣子。


出處:http://www.mobile01.com/topicdetail.php?f=512&t=2971459

沒有留言:

張貼留言