Terry 發問時間: 電腦與網際網路程式設計 · 1 0 年前

JAVA的問題abstract與interface

請解釋一下什麼是abstract與interface

已更新項目:

"比較" 什麼時後該用abstract與interface?

例如:interface有人說很適合做外包,是為什麼很適合做外包

那為什麼就abstract不適合?

如果是貼網頁 那大可不必吧~

我也會貼很多很多,最好是個人心得 與 工作實際體會~

2 個解答

評分
  • tomy
    Lv 4
    1 0 年前
    最佳解答

    要解釋這兩個keyword可不是三言兩語可以說完... 或許你可以把你遇到的實際問題提出來,這樣會比較容易抓到你的問題在哪喔~

    2007-04-04 01:53:24 補充:

    在繼續以下的答覆前,我假設你至少已經瞭解abstract class跟interface在語法上的差異。

    首先,針對你的問題:為什麼interface比abstract class較適合做外包?

    Ans: 用interface外包主要的考量是 - "不必讓你系統中的其他實作隨著外包過程而暴光"。試想,如果你用的是abstract class,那麼你是不是要把此abstract class提供給接這個case的人,而此abstract class中的實作或資料結構等訊息便會因此而曝光。其實interface有點在定規格的味道,可以讓介面與實作分離 (所以易於抽換實作)。例如:JDBC這個套件中幾乎都是interface,而實作的地方就在各家資料庫廠商所提供的JDBC Drivers中。

    至於abstract class與interface使用的時機,我舉個簡單的例子說明我的觀點:假設有一群Machines需要定一個通用的功能叫做"啟動" - start(); 這時候我有兩種解法:

    (1) 定一個abstract class (假設叫A),讓A中定義一個抽象方法start(); 再讓所有的Machines類別統統繼承A並各自對start()進行實作。

    (2) 定一個interface (假設叫B),讓B中定義一個抽象方法start(); 再讓所有的Machines類別統統implements B並各自對start()進行實作。

    OK~ 那該選(1) or (2)呢? -- 我的答案會取決於這些Machines類別之間的關聯性。

    => 當這些Machines全屬於同樣類型(concept) ex:都是車子(吉普車,公車,卡車), 此時我會選擇用abstract class(因為剛好符合抽象類別以及繼承的使用慣例)。

    => 若Machines之間的同質性不高(沒有特別限定在某個抽象概念下),例如分別是車、飛機和機車,此時我就會用interface(因為不必為此而強定一個上層抽象類別,更何況JAVA只支援單一繼承,用完了可就沒了ㄝ,當然要慎選囉!)

    希望對你有所幫助!

    參考資料: me
    • Commenter avatar登入以對解答發表意見
  • ?
    Lv 6
    1 0 年前

    抽象類別、介面型態在物件導向設計中伴演著極重要的角色,而其背後的多型應用,其使用的適當與否,足以影響程式的架構與未來的可維護性。 抽象類別(Abstractclass)介面(interface)型態介面與多重繼承

    • Commenter avatar登入以對解答發表意見
還有問題?馬上發問,尋求解答。