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

java 抽象類與介面的區別

抽象類:抽象類是用來捕捉子類的通用性的,不能被例項化,只能做為子類的超類,抽象類是被用來建立繼承層級裡子類的模板的。

   首先了解一下抽象方法。抽象方法是一種特殊的方法,只宣告而沒有具體的實現,宣告格式為:abstract void fun ();

抽象方法必須由abstract修飾,如果一個類含有抽象方法則稱這個類為抽象類,抽象類必須在類前用abstract修飾,抽象類中無具體的方法所以不能用抽象類建立物件。

抽象類中不一定必須含有抽象方法。

抽象類與普通類的區別:

1抽象方法必須為public或者protected (因為如果是private 則不能被子類繼承,子類便無法實現該方法)預設情況下預設為

public

2:抽象類不能建立物件

3:如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法,如果子類沒有實現父類的抽象方法,則必須將子類也定義為abstrct類。

 介面:介面是抽象方法的集合,如果一個類實現了某個介面,那麼就繼承類這個介面的抽象方法。

   介面中可以含有變數和方法,介面中的變數會被隱式的指定位 public static final  變數(並且只能是public static final privateprotected修飾會報錯)而方法會被隱式的指定位 public abstract(用其他關鍵字,比如private protected , static , final 

修飾會報編譯錯誤)並且介面中所有的方法都不能具體實現,也就是說介面的方法都是抽象方法,

   允許一個類遵循多個特定的介面,如果一個非抽象類遵循了某個介面,就必須實現介面中的所有方法,對於遵循某個介面的抽象類,可以不實現該介面的抽象方法。

   抽象類和介面的區別:

  1: 抽象類中可以實現成員方法的實現細節,介面中只能是public abstract  型別。

   2:抽象類中成員變數可以是任何型別的,而介面中的成員變數只能是public static final型別。

   3:抽象類中不能含有構造方法以及靜態程式碼塊靜態方法,而抽象類中均可包含。

       注意:

宣告介面時,只能夠使用public abstract  interface 

使用其他的修飾符編譯器會報錯。

介面與抽象類在本質上的區別:

  抽象類是java語言中體現了是一種繼承的關係,要想使得繼承的關係合理,父類和派生類之間必須存在is a 關係,即父類和派生類在本質上應該是相同的,對於interface來說則不然,並不要求interface的實現著和interface定義在概念本質上是一致的,僅僅是實現了interface定義的契約而已。