1. 程式人生 > >一起來搞明白JAVA抽象類和介面

一起來搞明白JAVA抽象類和介面

和老師聊了幾個小時後,明白自己最近學習方面的廣度是夠了,但深度確還差著很大的火候。所以開始著手一些身邊的基礎問題。今天我來說說自己關於JAVA抽象類和介面。

抽象類:

定義:有abstract修飾的類,我們稱之為抽象類 如: abstract class Test{}; 。

 方法:抽象類可以有具體方法和抽象方法 。 抽象方法如: abstract void play();  。

變數:和普通類一樣。

抽象方法和抽象類的聯絡:有抽象方法的類一定為抽象類,抽象類不一定有抽象方法。

和普通類的區別:

                1.不能建立物件。

                2.一般類繼承了抽象類必須實現抽象方法。

3.抽象方法修飾詞 必須為  public 或者 protected。

介面:

定義:非常抽象的型別,型別為Interface 修飾。如: public Interface Test(){};

方法:必須為抽象方法。修飾詞必須為 public abstract。

變數:修飾詞必須為  public static final 。

抽象類和借介面的區別(語法層面):

1. 介面的方法 只能為 public abstract 的抽象方法,而抽象類 既可以有抽象方法 也可以有一般方法。

2.介面的成員變數只能為只能為public final static 修飾,而抽象類則沒有限制,可以有一般的變數。

3.JAVA8 以前 介面中不能有靜態程式碼塊和靜態方法 ,而抽象類可以有靜態程式碼塊和方法。 注意:JAVA8 中的介面中可以有靜態方法,但是必須有body。

4.普通類只能繼承一個抽象類,但可以實現多個介面。

抽象類和借介面的區別(設計層面):

1.抽象類是對事物的抽象 ,介面是對行為的抽象。

如網上所說,抽象類是用來判斷一個物件是不是屬於某個類,而介面是用來分析一個物件是否具有某項技能或功能。列子:

我們程式設計師繼承了人這個抽象類,然後實現了技能介面中程式設計的方法。

2.抽象類是一種模板設計,而介面是一種行為規範,是一種輻射式設計。

對於一個模板式設計的抽象類中的方法而言,我們只需要修改模板中的方法,那麼所有子類的方法就能更新。而對於輻射式設計的介面中的方法,需要在所有實現類中修改,才能得到更新,互不相干。

這是我目前的見解,如有不正確的地方,請各位指正。