2010-10-05 39 views
-1

可能重複:
Abstract class and Interface class?當我需要在Java中使用抽象類和接口?

當我需要使用abstract class和interface在Java中?

我的疑問是

  1. 我需要哪些情況下使用抽象類,哪種情況下,我需要使用的界面。
  2. 接口滿足抽象類的屬性。那麼爲什麼我們需要特別抽象的類?我知道,抽象類包含抽象方法和非抽象方法,但是我們可以使用抽象類作爲普通類,那麼結果在兩個類中都是相同的。普通類也繼承了與抽象類相同的類。所以我們爲什麼需要抽象類。

如果有人知道這個好例子,請回復我。

謝謝。

+0

還強烈建議,在回答這個問題:http://stackoverflow.com/questions/56867/interface-vs-base-class – 2010-10-05 17:47:55

+0

考慮使用抽象類,如果這些聲明,適用於您的情況: - 你想要在幾個密切相關的類中共享代碼。 - 您期望擴展抽象類的類具有許多常用的方法或字段,或者需要公共訪問修飾符(例如protected和private)。 - 您想要聲明非靜態或非最終字段。這使您可以定義可訪問和修改其所屬對象狀態的方法。 – sarath 2014-02-11 17:00:17

回答

0

如果您想通過框架代碼應用模板模式http://en.wikipedia.org/wiki/Template_method_pattern,則需要使用抽象類。作爲一個經驗法則,如果你不打算實現模板模式,你最好用接口,它允許鬆散耦合,就像Spring框架一樣。鬆耦合導致設計開放,並具有更好的可測試性,像模擬對象(http://easymock.org)

+0

嗨,當我們需要使用重載和覆蓋,如果你知道好例子請告訴我。 – Velmurugan 2010-10-05 17:56:30

+0

重載與抽象類和接口無關。重載方法與現有方法具有相同的名稱,但具有不同類型或數量的參數。重寫正在重新定義一個子類中超類的方法。看到http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading的答案,那裏有一個例子。 – 2010-10-05 18:03:26

2

抽象類的另一個重要方面是,不像界面,向它添加新的方法贏得了' t打破二進制兼容性。因此,從API演進的角度來看,尤其是當您可以期望添加公共API時,抽象類更爲可取。

1

我會說有兩種類型的繼承。我會說實施繼承和其他合同繼承。

抽象類用於實現繼承。您可以擴展/更改超級/父級的行爲。

接口將用於合同繼承。如果你更感興趣的是讓類實現某種契約(帶有參數的服務方法 - 更多的是契約),並且行爲對於不同的實現是不同的,那麼你就不能在抽象類中捆綁並擴展行爲。