在介紹接口以前,咱們先了解了解它的兄弟「繼承」先生。編程
在面向對象編程中,繼承避免了多個類間重複定義共同行爲,既幫咱們節約了時間也節約了系統資源。看起來繼承對咱們有莫大的幫助,可是實際編程中咱們應該少用繼承。爲何呢?學習
其中的緣由不少,筆者以爲最大的一個緣由是繼承強調了一種"is a"的關係,即「是一種」的關係。spa
好比說麻雀是一種鳥,鯽魚是一種魚。這就會帶來一個問題了,假設有一個東西它和鳥同樣會飛,像魚同樣能在水裏遊,那它就必定是一種鳥一種魚麼。答案固然是否認的。設計
這樣若是在程序中,多個類有同一種行爲,能把它們都繼承自一個父類麼?若是你不怕天下大亂,我想你能夠試試看。對象
不過不用怕,還好接口來了。網上看到一個對接口的描述,我以爲很是不錯。繼承
他說接口是一個標準,生活中有不少接口。好比說水龍頭管接口、電源接口等。之前水龍頭生產商在採用接口以前,廠商要同時提供水龍頭和下水管,他們是一體的不能變動。同時也只適用於他的一種產品。而有了接口以後,廠商就不用管他的下水管如何設計了,只用按照接口標準來生產水龍頭,完成後直接接到下水管上就能夠了。這就是面向接口,這樣你的下水管就可使用全部的符合下水管標準的水龍頭,而不是以前的一種水龍頭。很明顯如今更換水龍頭也更加的方便。接口
接口是對一種行爲的定義,不一樣類能夠有同一種行爲。這樣使得接口和實現分離,適用於團隊的協做開發。主要爲了實現鬆散耦合的系統,便於之後升級擴展。資源
另外繼承就像是類的親爹,而接口是類的乾爹。親爹只有一個,而乾爹能夠認不少個。其實也很好理解,繼承強調"is a"關係,固然只能是一種。而接口定義的是行爲,一個類必然能夠有多種行爲。開發
具體語法層面,定義行爲使用interface關鍵字,且接口中的方法不能操做必須是抽象的,直接表示爲abstract,且必定是public。產品
如public interface Swimmer{
public abstract void swim();
}
使用接口必須使用implements關鍵字,此時對接口中定義的方法有兩種處理方式,一是操做接口中定義的方法,二是再度將該方法標示爲abstract.
如public abstract class Fish implements Swimmer{
...
}
另外接口能夠繼承別的接口,也可同時繼承兩個以上的接口,一樣也是使用extends關鍵字,表明了繼承父接口的行爲。
接口的使用大部分都在比較大的項目中,所以在初學編程時並無機會接觸到接口,隨着學習的深刻相信會對接口的使用有更多的感觸。