1. 程式人生 > >Java中介面與抽象類的區別

Java中介面與抽象類的區別

java中介面和抽象類自己理解起來經常混淆,所以我就整體總結一下這兩個概念。

1. 介面

介面是指一個方法的集合,介面中所以的方法都沒有方法體,使用interface關鍵字來實現。注意,介面中可以有成員變數,但是成員變數必須是static final型別,而且必須要賦初始值(原因是介面就是提供一種統一的’協議’,而介面中的屬性也屬於‘協議’中的成員.它們是公共的,靜態的,最終的常量.相當於全域性常量.)。
介面的目的:定義介面是為了實現一種共同的協議,統一標準的目的,是大家都知道這個是做什麼的,但是具體不用知道具體怎麼做。

2. 抽象類

抽象類的定義是如果一個類中包含抽象方法,那麼這個類就是抽象類,使用abstract關鍵字修飾。注意,抽象類中可以包含非抽象方法。抽象方法是指只有函式定義,沒有函式的實現。
使用抽象類的目的

:只知道子類應該具有某種方法,但是不知道該方法的具體實現,從而約束子類必須有這樣的方法,具體如何實現就由子類來完成;從多個具有相同特徵的類中抽象出一個抽象類,以這個抽象類作為子類的模板,從而避免了子類設計的隨意性。

二者的相同點:

  1. 都不能被例項化;
  2. 介面的實現類或者抽象類的子類都只有實現了介面或者抽象類中的方法後才能被例項化。

不同點:

  1. 介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
  2. 類可以實現很多個介面,但是隻能繼承一個抽象類。
  3. 介面強調特定功能的實現(has-a),抽象類強調所屬關係(is-a)。
  4. 介面中成員變數預設是public static final,其成員方法都是public、abstract的,只能被這兩個關鍵字修飾。抽象類有自己的資料成員變數,成員變數預設是default,當然也可以被定義為其他。抽象類中的抽象方法不能用private,static,synchronized,native等訪問修飾。