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等訪問修飾。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章