面向對象:Java 接口VS抽象類

抽象類的特性

  • 不允許被實例化,只能被繼承,不能new一個抽象類的對象出來;
  • 抽象類可以包含屬性和方法。方法既可以包含實現,也可以不包含,不包含代碼實現的方法叫做抽象方法;
  • 子類繼承抽象類,必須實現抽象類中所有的抽象方法。

接口的特性

  • 接口不能包含屬性(也就是成員變量);
  • 接口只能聲明方法,不能包含代碼實現;
  • 類實現接口時,必須實現接口中聲明的所有方法;

兩者區別

抽象類表示的是is-a的關係,而接口表示的是has-a的關係,表示具有某種功能。對於接口,還有一種叫法,稱爲協議(contract)。

抽象類和接口能解決的編程問題

1.抽象類是爲代碼複用而生的。多個子類可以繼承抽象類中定義的屬性和方法,避免在子類中,重複編寫相同代碼。
2.抽象類更多是爲了代碼複用,而接口更側重於解耦。接口實現了約定和實現相分離,可以降低代碼間的耦合性,提高代碼可擴展性。

該用抽象類還是接口?

如果要表示is-a的關係,且爲了解決代碼複用問題,就用抽象類;
如果要表示一種has-a的關係,且是爲了解決抽象而非代碼複用問題,就可以使用接口。

抽象類是自下而上的設計思路,先有子類的代碼重複,然後再抽象成上層父類;而接口正好相反,是一種自上而下的設計思路。編程時,一般先設計接口,然後再去考慮具體實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章