2013年7月20日 星期六

interface and abstract class


  • interface
Interface不能Instance,不能有建構式、成員。
不能有修飾詞,Public、Private…等。
不能宣告為共用成員。
實作Interface必須實作Interface所有方法及屬性。
一個Class可實作多個Interface。
  • abstract
Abstract Class不能Instance。即不能使用New關鍵字初始化。
Abstract Class是必須被衍生Class覆寫方法。
衍生Class可以部份實作。
如果Class中包含Abstract Method(抽象方法),那麼此Class就必須定義為Abstract Class。
一個Class只能繼承一個Abstract Class。


  • 相同:
兩者都不能被具體化。
都必須去實作已宣告的『抽象』方法。
  • 相異:
一個類別能實作很多介面,但只能繼承一個抽象類別。
介面所定義的每個方法都必須在延伸類別中實作,抽象類別則可以定義部分的方法是已經具有此方法的內容描述,而部分是定義必須在延伸類別中去實作的。這麼說或許讀者會與我早先說明的介面與抽象類別『都必須去實作已宣告抽象的方法』感到疑惑,這部分會在稍後做說明。
介面強調的是定義一些功能給較不相干的類別使用,抽象類別主要是應用在關係密切(is a)的類別中使用。
抽象類別一定屬於繼承架構,而且一定是父類別,介面可以讓毫無關係的類別來實作同一個介面,這點同時也呼應了第三點的說明。


  • 結論:
除了實際功能面的差異外,另外Abstract Class一般都是在Class程式碼撰寫過程慢慢被發現,
進而從Class提升為Abstract Class,我們應盡量讓Abstract Class擁有最多的共用程式碼,盡量減少資料。

而Interface比較像定規格,一般而言都是一開始就設計、定義,也是另一種的「藍圖」,
一開始在什麼都不知道的情況下,預先設計好相關架構。

沒有留言:

張貼留言