java抽象類和接口的對比

java抽象類和接口的對比


抽象類:

  • 含有abstract修飾符的class即爲抽象類,abstract類不能創建的實例對象。
  • 含有abstract方法的類必須定義爲abstract class,abstract class類中的方法不必都是抽象的,抽象類中可以包含不帶abstract關鍵字的方法。
  • abstract class類中定義抽象方法必須在具體的子類中實現,所以,不能有抽象構造方法或抽象靜態方法。
  • 如果的子類沒有實現抽象父類中的所有抽象方法,那麼子類也必須定義爲abstract類型。

接口:

  • interface可以說成是抽象類的一種特例,接口中的所有方法都必須是抽象的。
  • 接口中的方法定義默認爲public abstract類型
  • 接口中的成員變量類型默認爲public static final。

兩者的區別:

  1. 抽象類可以有構造方法,接口中不能有構造方法。
  2. 抽象類中可以有普通成員變量,接口中沒有普通成員變量
  3. 抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
  4. 抽象類中的抽象方法的訪問類型可以是public,protected和(默認類型,雖然
    eclipse下不報錯,但應該也不行),但接口中的抽象方法只能是public類型的,並且默認即爲public abstract類型。
  5. 抽象類中可以包含靜態方法,接口中不能包含靜態方法
  6. 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,並且默認即爲public static final類型。

使用接口的好處:

  • java只是單繼承,但是可以實現多個接口,繼承的耦合性太強,java推薦高內聚低耦合的設計思路,不推薦使用繼承。在用繼承的情況下,如果還必須要繼承另外的接口會很麻煩,儘量用接口,這樣在你必須要用到繼承的時候就可以用了。抽象類和接口都不能被實例化。接口沒有構造方法,不能被實例化,但是抽象方法可以有構造方法,不過不是用來實例化對象的,使用來初始化的。
發佈了30 篇原創文章 · 獲贊 19 · 訪問量 6993
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章