一起來搞明白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.抽象類是一種模板設計,而介面是一種行為規範,是一種輻射式設計。
對於一個模板式設計的抽象類中的方法而言,我們只需要修改模板中的方法,那麼所有子類的方法就能更新。而對於輻射式設計的介面中的方法,需要在所有實現類中修改,才能得到更新,互不相干。
這是我目前的見解,如有不正確的地方,請各位指正。