不請自來~
extends和implements都是Java最基礎的知識點,本來沒有必要回答這個問題,但是看了一下別人的答案,基本上還是講基本的概念,念書誰不會啊,都沒有講到兩者的真正作用,特別是implements,我給大家分享分享我的體會。
解耦
implements的重要作用之一,就是為了解耦。這是什么意思呢,給大家舉個例子。
如果一個接口就一個實現的話,沒有必要過度設計,只會加大代碼的復雜程度(不過需求未來的變化,是預測不到的)。
只有一個實現的話,也會存在遷移的問題,比如現在使用的Oracle數據庫,準備遷移到Mysql數據庫上,使用面向接口編程的話,只修改數據庫相關的實現即可。
接口的實現不是new出來的。
QQ、微信都是第三方登錄,那么應該設計好接口,QQ登錄是一個實現,微信登錄是一個實現;如果未來支持微博登錄的話,那么就在增加一個實現。然后通過工廠模式獲得對應的實現類,而不是直接在代碼中寫:if(登錄方式選擇QQ){實現}。
設計和實現分離
用JDBC舉例,很容易理解(使用Mysql舉例):
我們只看這一句:DriverManager.getConnection(URL,user,password);
JDBC連接Mysql和其他數據庫的實現細節肯定不一樣,如果都讓java實現的話,每一種數據庫都要兼容,這是不可能的。
如果完全讓每個數據庫的實現方寫,mysql的連接方法名叫getConnect,DB2自己寫的時候叫getCon,誰也不服誰,都覺得自己是最優的,這時候調用方就麻煩了。
Java(最早是sun公司)一看不行,我給你們規定好吧,都叫getConnection,你們就按照我的寫,我提供接口,你們實現。
于是,當通過JDBC連接Mysql的時候,需要引入mysql的jar包,可以看到其中的代碼都是實現了java.sql.Driver:
另外說兩點
一流的公司做標準,這句話好理解了吧。 軟件生態圈很重要,一方面的意思就是:Java做的牛了,出個JDBC的標準,各個數據庫廠商都爭著實現,咱自己編個啥語言出個接口,看人家理不理。