抽象類和接口特點及區別總結

抽象類

1.抽象類中可以構造方法
2.抽象類中可以存在普通屬性,方法,靜態屬性和方法。
3.抽象類中可以存在抽象方法。
4.如果一個類中有一個抽象方法,那麼當前類一定是抽象類;抽象類中不一定有抽象方法。
5.抽象類中的抽象方法,需要有子類實現,如果子類不實現,則子類也需要定義爲抽象的。

接口

1.在接口中只有方法的聲明,沒有方法體。 (Java8 接口可以有實例方法)
2.在接口中只有常量,因爲定義的變量,在編譯的時候都會默認加上 public static final (必須被初始化,不能改變)
3.在接口中的方法,永遠都被public來修飾(只能)。
4.接口中沒有構造方法,也不能實例化接口的對象。
5.接口可以實現多繼承
6.接口中定義的方法都需要有實現類來實現,如果實現類不能實現接口中的所有方法則實現類定義爲抽象類。

PS.

1、靜態方法不能被重寫,不能被抽象
本地方法是本地代碼實現的方法,不能是抽象
synchronize與方法的實現細節有關,抽象方法不能被synchronize修飾

2、抽象類中可以定義一些子類的公共方法,子類只需要增加新的功能,不需要重複寫已經存在的方法;
而接口中只是對方法的申明和常量的定義。

區別總結:

  1. 類可以實現很多個接口,但是隻能繼承一個抽象類
  2. 接口中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。(Java8 接口可以有實例方法 需要關鍵字default)
  3. Java接口中聲明的變量默認是public static final(必須賦初始值)。抽象類可以包含非final的變量。
  4. Java接口中的成員函數默認是public abstract的。抽象類的成員函數可以是private,protected或者是public。
  5. 接口可繼承接口,不能繼承類(抽象類和普通類) 抽象類可繼承接口也可繼承具體類(繼承接口時可只實現部分方法)
  6. 非抽象類如果要實現一個接口,它必須要實現接口聲明的所有方法。類可以不實現抽象類或接口聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

接口是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調用的。

從設計角度來看抽象類和接口:
1、抽象類就是is a,是實例必須要有的,比如Door 必須有開和關。
  而接口就是has a,可以有也可以沒有,比如Door可以有報警器,但是報警器不是門必須有的,是可擴展的行爲。
2、抽象類強調的是同類事物的抽象,接口強調的是同類方法的抽象。

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