抽象類、接口的區別 和 抽象類可以不實現接口的全部方法


抽象類和接口的區別

  抽象類里面可以有非抽象的方法,接口里只能有抽象方法。


  抽象類中的抽象方法聲明時不能有大括號,而接口中的所有方法都沒有大括號。

抽象類(abstract class):

  a.抽象類是僅供派生的類,無法實例化一個抽象類,只能實例化從它派生的類。

  b.抽象類的主要特征在於它包含抽象成員(abstract member),抽象成員是不具有實現的一個方法或屬性,其作用是強制所有派生類提供實現。

  c.由於抽象成員應當是要被重寫(override)的,因此這類成員會自動成為virtual成員,而且不能這樣顯示地聲明。

  d.抽象成員不能是private的,否則派生類看不見他們。

接口(interface):

  a.接口是抽象類的變體。

  b.接口的一個關鍵特征是它既不包含實現,也不包含數據。

  c.字段(也就是數據)不能出現在一個接口中,如果一個接口要求派生類包含特定的數據,那么它會使用屬性而不是字段。由於屬性不會包含任何實現作為接口聲明的一部分,所以他不會引用一個支持字段。

  d.接口的宗旨是定義由多個類共同遵守的一個契約,所以接口中所有成員都必須為public類型。

抽象類可以不用實現接口的全部方法

  有的時候需要將接口和抽象類配合起來使用,這樣可以為開發者提供相當的便利性,開發者覺得哪個方便就選用哪個。這樣的抽象類稱為便利類。此時,便利類並不需要實現接口的所有方法,可以留給繼承它的子類去實現它們。
  

  這么做並非是沒有意義的,當你自己寫的類想用接口中個別方法的時候(注意不是所有的方法),那么你就可以用一個抽象類先實現這個接口(方法體中為空),然后再用你的類繼承這個抽象類,這樣就可以達到你的目的了,如果你直接用類實現接口,那是所有方法都必須實現的。

  抽象父類提供給子類一個方法,主要是起規范作用,你不寫父類這個方法也行。
  如果是接口的話,子類就一定要復寫父類所有的抽象方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM