java-介面和抽象類的聯絡和區別。

大暑發表於2019-01-08

介面和抽象類的聯絡和區別。

 一,簡單總結

   1、抽象類和介面都不能直接例項化,如果要例項化,抽象類變數必須指向實現所有抽象方法的子類物件,介面變數必須指向實現所有介面方法的類物件。

  2、抽象類要被子類繼承,介面要被類實現。

  3、介面只能做方法申明,抽象類中可以做方法申明,也可以做方法實現

  4、介面裡定義的變數只能是公共的靜態的常量,抽象類中的變數是普通變數。

  5、抽象類裡的抽象方法必須全部被子類所實現,如果子類不能全部實現父類抽象方法,那麼該子類只能是抽象類。同樣,一個實現介面的時候,如不能全部實現    接 口方法,那麼該類也只能為抽象類。

  6、抽象方法只能申明,不能實現,介面是設計的結果 ,抽象類是重構的結果

  7、抽象類裡可以沒有抽象方法

  8、如果一個類裡有抽象方法,那麼這個類只能是抽象類

  9、抽象方法要被實現,所以不能是靜態的,也不能是私有的。

  10、介面可繼承介面,並可多繼承介面,但類只能單根繼承。

  二,標準作答

  相同點

  • 抽象類和介面均包含抽象方法,類必須實現所有的抽象方法,否則是抽象類
  • 抽象類和介面都不能例項化,他們位於繼承樹的頂端,被其他類繼承和實現

兩者的區別主要體現在兩方面:語法方面和設計理念方面

語法方面的區別是比較低層次的,非本質的,主要表現在:

  • 介面中只能定義全域性靜態常量,不能定義變數。抽象類中可以定義常量和變數。
  • 介面中所有的方法都是全域性抽象方法。抽象類中可以有0個、1個或多個,甚至全部都是抽象方法。
  • 抽象類中可以有構造方法,但不能用來例項化,而在子類例項化時執行,完成屬於抽象類的初始化操作。介面中不能定義構造方法。
  • 一個類只能有一個直接父類(可以是抽象類),但可以充實實現多個介面。一個類使用extends來繼承抽象類,使用implements來實現介面。

二者的主要區別在設計理念上,決定了某些情況下使用抽象類還是介面。

  • 抽象類體現了一種繼承關係,目的是複用程式碼,抽象類定義了各個子類的相同程式碼,可認為父類是一個實現了部分功能的“中間產品”,而子類是“最終產品”。父類和子類間須存在“is-a”關係,即父類和子類在概念本質上是相同的。

介面並不要求實現類和介面在概念本質上一致,僅僅是實現了介面定義的約定或能力而已。介面定義了“做什麼”,實現類負責完成“怎麼做”,體現了功能(規範)和實現分離的原則。介面和實現之間可以認為是一種“has-a的關係

 

 java常用類  

連結:https://pan.baidu.com/s/14DPwWZpvwwYXWAMwz3xmnQ 提取碼:lbkx 

 

相關文章