java的接口理解_原来Java的接口可以这样理解
為什么寫這篇文章
今天有人問了我這樣一個問題
Java中為什么要使用接口呢?
還要先定義了一個接口,類還要實現接口的方法,還不如直接在這個類中寫實現方法呢,根本沒必要定義接口啊。
大概就是這樣一個問題。
這個問題不止困擾很多初學者,有的2年工作經驗都不太理解,接口到底是個什么東西。
這里根據本人對接口的理解,簡單談談如何理解接口,如有錯誤,請指正。
接口是什么
接口首先是個規范(也可以叫協議,覺得怎么理解方便怎么理解就好)
先舉個生活中的例子
某天你去上海去旅游,做了半天的車,下車后有點餓,想吃點東西,找了一個上海菜的飯店。進去準備吃東西。
這里的菜單就是一個特別形象的接口。
看菜單我就知道這家店賣紅燒肉,生煎包, 手撕雞, 清蒸大閘蟹、蟹粉小籠、蟹粉豆腐,八寶鴨等等菜品。然后我就可以直接點點餐, 來個紅燒肉,生煎包,來個XX湯。搞定。
樓主是東北人,如果沒有菜單,我進去可能會問有沒有小雞燉蘑菇、豬肉燉粉條。然后告訴我都沒有。這樣一個一個的問非常麻煩,而且還未必知道點什么。那我就要問你這都有什么啊,服務員跟我balabala一堆,我還沒記住都有什么,這點餐是不是特別麻煩呢,有了菜單簡單多了。這里的菜單就可以理解為一個接口。顧客就是接口的調用者,廚房就是接口的實現類,會根據接口提供的方法,提供各種菜品。
上面的例子代表了接口一個重要作用,接口首先是個規范。這個規范很方便調用者去使用。就是上面的顧客,顧客不需要知道你是怎么做的紅燒肉,只需要知道你有紅燒肉就夠了。這個情況下就非常適合使用接口了。
總結:接口是為2個不同類之間連接定義的標準。上面的顧客和廚房,直接用菜單連接起來。
職責的分離
還是拿生活中最常見的東西舉例子。
這個是插排
插排, 應該是家里都有的東西了,插排的插孔一般有2個的也有三個的?,F在很多插排還提供了USB口。這里我們可以把2口的插孔,三口的插孔。還有USB口的插孔理解位三個不同的接口。個接口定義了插排孔的大小,和距離。有這樣的接口,我才能通過接口或者說是規范去生產插排,然后才能提供給你使用。如果我提供的接口比較小你手機的充電頭插不進去,那么我生產了是不是沒有意義呢。我生產的插排是為了給用戶使用的,而使用插排的就是插排的調用者,就是一個個具體的插頭,如果用戶的插頭是USB的那普通的插排就無法使用。這時候用戶就需要找到一個實現了USB接口的插排。而用戶卻不用關心你是如何實現的,也不需要考慮你生產的是什么樣子,只要你按接口實現就可以了。上圖給了不同類型的插排,雖然樣子各異,功能也不完全一樣,但是他們都實現了具體的接口。
通過上面的例子,我們定義了三個不同的接口,每個接口有不同的具體實現。但是具體實現是誰作為調用者完全不關系,是公牛插排也好,小米插排也好,或者是飛利浦也無所謂。這就出現了接口的一個重要思想,接口和實現分離的思想。這個思想的一個最直接的好處就是,代碼的解耦。插頭的制造過程不考慮插排的具體實現,而只是按照標準接口實現就可以。而插排的制造也不需要具體的插頭。根本不需要考慮是誰去使用,不管是手機用電腦用,電視用或者別的東西。我只要按標準生產我的就行了。這樣分工就非常明確了。減少了耦合度。使插排的制造和插頭的制造都變得更加容易。而且更加的具有適應性。
結尾
本來還有一些東西需要寫一下。暫時先總結一下,以后補充上。
第一接口可以理解位一個規范。這個規范規定了一個類的部分行為,而不是全部行為。
比如上面的例子我們有三個接口。有的插排只實現了其中的兩個,而沒有USB接口。那么不需要USB接口的調用者,比如電視機就可以使用這個插排。
接口可以隔離實現,對于接口的調用者,不需要考慮他調用哪個具體實現類,如果沒有接口,那么電視可能就是位固定的插排生產的,這樣做一般也沒什么,只要插排沒有問題,電視還是可以用的,但是有一天插排出了問題,你需要換個插排的時候。因為沒有固定的接口,那么其他人生產的插排可能完全用不了。
如果兩個類都是按同一個標準實現了一個同名的方法,那么是不是也可以呢,理論個別情況可以,但是這里就出現另一個問題,就是如果他們只是方法名相同,但是沒有實現同一個接口,那么對于調用者來說,他需要非常明白兩個類的這個方法都是具體做什么才可以這樣用,如果使用接口,調用者就不需要考慮這個問題,而直接調用接口的這個方法就行了。
還有一個重點要說的地方。就是接口有一個好處就是實現了,接口和實現的分離,如果不理解這句話,用另外一個意思理解,定義和實現相分離,接口只是對某一類東西的定義,而具體實現就是具體的類,分離有一個好處就是,可以更好的隱藏實現。很多時候實現是不希望被調用者看到具體的實現細節的。而只是位調用者提供幾個方法,這個時候接口就特別有用了。
比如上面吃飯的例子,用戶只是看了菜單而已,但是具體如何做的菜,用戶是不知道的。飯店也不提供廚房給用戶參觀,對用戶來說,廚房用了什么東西根本不知道,而飯店很多時候希望這樣的結果,比如豆油,有各種價格的,可以用低價的提供。米飯也一樣。雖然這不是個好想法。
關于我
我是IsCoding,7年Android從業經驗。
QQ群號 121915371
QQ 號 1400100300
總結
以上是生活随笔為你收集整理的java的接口理解_原来Java的接口可以这样理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java sessionmanager_
- 下一篇: java8避免null_在 Java 8