在說介面前先說一下關於abstract方法的2點總結:
a. 申明為abstract了的方法一定是沒有方法體的;
b. 一個方法如果沒有方法體,那麼必須申明為abstract;
這就不像類(class)了,我們以前說過,一個類即使不包含abstract方法,它也可以申明
為abstract類。下面就開始談談介面(interface)吧。
介面可以說就是一組規範(requirement),它只告訴你要做什麼(do what),而不告訴你怎麼去做(how to do),具體的實現(implementation)都是類(class)的工作。
1. 為什麼要使用介面
為什麼要使用介面呢?為什麼不直接在類中定義並實現一個方法呢?我認為(注意:個
人看法而已)是為了編程的靈活性與簡單性。使用了介面我們充分利用java的多態(polymorphism)與動態綁定機制,這也與面向介面的編程設計模式相符合,我們可以很簡單編寫代碼。例如有介面interface People,那麼對於任何一個實現了它的類如Doctor,我們都可以把它的對象賦值給People型別的reference,例如People p=new Doctor()。這樣的話我們可以把變數讀申明為People型別的,然後調用方法的話就讓JVM自己去找該調用哪個實作類別的那個方法咯。
另外一個原因就是因為在java中一個類只能有一個父類,就像一個人只能有一個父親一樣。但是一個類可以實現很多個介面,只要它願意實現,這就為我們提供了方便之門。本來介面和父類就是非常相似的,起的作用也很相似,在UML中就把interface稱作衍型,是對類這個概念的擴充或者是補充。突然想起一個比喻來形容父類和介面了:一個人只能有一個父親,但是他可以有若干個叔叔或者舅舅,人有些特徵像叔叔或者舅舅也是很正常的拉,^_^。在C++中一個類就可以有多個父類,這叫多重繼承(multiple inheritance),在java中通過介面實現了這個功能。
2. interface具有哪些特徵
首先,介面不能夠執行個體化,即不能對其使用new運算子,雖然我們不能建立介面對象,
但是可以聲明介面變數,前面有樣本;其次,介面中的方法都預設為public abstract類型的,執行個體都預設為pubic static final類型的,都不能使用任何其它的修飾符;再次,介面可以像類那樣使用繼承機制,當然必須都是介面咯。