色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

Java為什么要區分extends和implements?

錢瀠龍2年前12瀏覽0評論

不請自來~

extends和implements都是Java最基礎的知識點,本來沒有必要回答這個問題,但是看了一下別人的答案,基本上還是講基本的概念,念書誰不會啊,都沒有講到兩者的真正作用,特別是implements,我給大家分享分享我的體會。

解耦

implements的重要作用之一,就是為了解耦。這是什么意思呢,給大家舉個例子。

由于Java的多態,接口的調用者,只需要調用接口就好了,具體接口中的功能,就讓接口的實現者去實現好了。這樣的好處是,避免接口的調用方直接參與接口邏輯的實現,避免調用方和實現方的關系過于緊密(修改或增加實現方的時候,還需要修改調用方的代碼),這就是解耦。要注意:

  • 如果一個接口就一個實現的話,沒有必要過度設計,只會加大代碼的復雜程度(不過需求未來的變化,是預測不到的)。

  • 只有一個實現的話,也會存在遷移的問題,比如現在使用的Oracle數據庫,準備遷移到Mysql數據庫上,使用面向接口編程的話,只修改數據庫相關的實現即可。

  • 接口的實現不是new出來的。

舉個例子(可能不是非常恰當,主要為了理解),這幅圖大家應該很常見吧,這個是的登錄頁面:

QQ、微信都是第三方登錄,那么應該設計好接口,QQ登錄是一個實現,微信登錄是一個實現;如果未來支持微博登錄的話,那么就在增加一個實現。然后通過工廠模式獲得對應的實現類,而不是直接在代碼中寫:if(登錄方式選擇QQ){實現}。

設計和實現分離

implements另外一個重要的作用,就是讓設計和實現分離。制定好標準,可以讓調用方和實現方各做各的,互不影響;也可以讓不同的實現方,都用一個標準來實現,避免調用方的改動。

用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的標準,各個數據庫廠商都爭著實現,咱自己編個啥語言出個接口,看人家理不理。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。