為什么寫Java程序需要接口

為什么寫Java程序需要接口

?

我之所以以這個作為標題,并不是為了玩噱頭,講一些似是而非的空話,還是以探索加發現,

追本溯源的講解一下為什么Java需要接口,怎么理解,怎么用它。

?

首先接口并不是Java才有的,這個是面向對象語言的基本特征之一。回想面向對象之前的那些

編程語言Win32 API中有個最經典的例子是當你在windows窗口中繪制一些內容以后,最大

化再最小化以后內容沒了,原因是你沒有捕獲重寫windows的一個WM_Paint的消息,

windows不知道你想繪制什么東西了,高人管這種應用叫CallBack(回調),意思是你調用

windows的paint方法繪制方法,但是windows不知道要繪制什么,結果回頭跟你要,你重

寫了它就繪出來,不然就什么都沒有一張白紙了。

?

然而當面向對象語言洶涌發展,各種設計模式應運大行其道,很少再有人提及Callback了,怎

么回事情,難道它消失了嗎,沒有它被面向對象語言換了個名字用得更加的大行其道,以致你以

為它不存在了,在Java中它就是接口。舉個Java中最簡單的例子,線程的Runnable接口,當

你在Java中啟動一個線程時候,Java通過調用thread.start()函數來幫你實現線程的啟動,但是

啟動以后它執行什么JVM并需要不知道,如果你不重寫run方法,就什么都不執行,原因在于

JVM并不知道你在線程里面想要干什么,而你又不能自己調度線程,線程調度依賴JVM本身實

現,所以這個是個很好的CallBack的例子,你調用start()方法讓JVM執行線程,JVM回調你實

現的線程run()方法。很完美的實現!沒有接口你怎么辦到。

?

另外個很好的例子,可以很完美的詮釋接口的秒用,Java編譯的時候常會有包依賴關系,假設A

要依賴B,這個沒問題,如果有一天你發現B中的類C居然要反過來訪問A里面的類D,你傻

眼了,這樣就會破壞AB之間的依賴關系,還會產生編譯錯誤,這個時候定義接口文件E在B中,

讓D繼承一下,傳回一個reference給C,問題很完美的解決,也許這么說比較復雜,看下圖:

?

就這樣,你還可以在D中調用C,想讓C執行D的方法process()只要回傳一個reference即可。

?

而Spring則將接口的概念更加的發揚光大,很多人接觸Spring就知道一個概念依賴注入,如果

定義個接口話,然后將引用配置在xml文件中,至于你需要的那個reference的接口幫你做什么

事情,完全由你自己決定,這是一個很偉大的思想,不過是把接口與實現更加測地的分離了,這

樣你再也不遇到因為包依賴關系導致的編譯錯誤,Spring的ApplicationContext與

XMLBeanFactory對象幫你自動實現了包依賴解耦。

?

最后你會發現,接口本質上不過在回調函數之上批了一件華麗的外衣,想當初WIN32 API的年

代,只有Callback這種東西真的滿天飛,而且現在還在飛!

轉載于:https://www.cnblogs.com/alleyonline/p/5101617.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257863.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257863.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257863.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

《領域特定語言》一1.5使用代碼生成

1.5使用代碼生成 在迄今為止的討論中,要處理DSL,組裝“語義模型”(第11章),然后執行語義模型,提供我們希望從控制器得到的行為。在語言圈子里,這種方式稱為解釋(interpretation&…

SVG 基礎圖形

SVG 基礎圖形 SVG包含了以下的基礎圖形元素&#xff1a; 矩形&#xff08;包括可選的圓角&#xff09;&#xff0c;使用<rect>元素創建圓形&#xff0c;使用<circle>元素創建橢圓形&#xff0c;使用<ellipse>元素創建直線&#xff0c;使用<line>元素創…

棗莊三中高考2021成績查詢,2021棗莊中考成績查詢系統入口

2021棗莊中考成績查詢系統入口2021-05-20 19:11:35文/王佳慧2021年&#xff0c;棗莊的中考時間快到了&#xff0c;本文分享了棗莊中考成績查詢入口&#xff0c;系統開通后考生可登陸查詢成績。棗莊中考成績查詢入口志愿填報須知1.錄取標準&#xff1a;提前批、第一批、第三批學…

移動端”宴席知多少

轉載(http://adt.aicai.com/index.php/archives/179/) 瞎折騰移動端的項目已經很長一段時間了&#xff0c;并不像其它企業一樣&#xff0c;可以有項目組去完成&#xff0c;基本都是一個人瞎嘗試&#xff0c;時而web&#xff0c;時而web app。恍恍惚惚過了這段歲月&#xff0c;也…

快速的取整方法(~~)

為什么80%的碼農都做不了架構師&#xff1f;>>> 最近看一篇js裝逼小技巧————雙波浪號的妙用(將內容轉化為數字,或者小數取整)&#xff0c;但是本身我的JavaScript水平比較低對其底層操作和其使用范圍不甚了解&#xff1b;通過翻閱資料現進行簡單的整理。 ###裝…

git log友好顯示

查看commit 提交日志 $ git log $git log --prettyoneline $git reflog 顯示所有提交記錄&#xff0c;包括已經回退的提交&#xff0c;如圖&#xff1a;提交了abc 和 bb 然后回退到 abc   $git log 只顯示abc提交 可以使用 $git reset --hard commit號 回退到bb git reflog…

jprofiler_windows-x64_9_1注冊碼

L-Larry_Lau163.com#5481-ucjn4a16rvd98#6038 L-Larry_Lau163.com#36573-fdkscp15axjj6#25257 轉載于:https://www.cnblogs.com/sprinng/p/5104507.html

南理工計算機技術專業學位,南京理工大學計算機技術(專業學位)考研難嗎

很多考生在準備南京理工大學計算機技術(專業學位)考研難嗎&#xff1f;是考研報考的時候都會產生這樣的疑問&#xff1a;這個專業的研究生好嗎&#xff1f;適合我嗎&#xff1f;對我以后的人生和職業會有幫助嗎&#xff1f;考生在準備南京理工大學計算機技術(專業學位)專業考研…

《分布式系統:概念與設計》一2.3.2 體系結構模式

2.3.2 體系結構模式 體系結構模式構建在上述討論過的相對原始的體系結構元素之上&#xff0c;提供組合的、重復出現的結構&#xff0c;這些結構在給定的環境中能運行良好。它們未必是完整的解決方案&#xff0c;但當與其他模式組合時&#xff0c;它們會更好地引導設計者給出一…

javascript sort()實現元素json對象的排序

看以下代碼&#xff1a; var s [ { name: "Robin Van PurseStrings", age: 30 } ,{ name: "Theo Walcott", age: 24 } ,{ name: "Bacary Sagna", age: 28 } ].sort(function(obj1, obj2) {// 實現增序排列&#xff1a;前者的 age 小于后者…

html5手機簽名,html5手寫簽名

var canvas, board;canvas document.getElementById(myCanvas);canvas.height 300;canvas.width 400;board canvas.getContext(2d);board.lineWidth 1; //設置畫筆粗細board.strokeStyle "#f00";board.lineJoin "round"; //設置畫筆軌跡基于圓點拼接…

調查:Java程序員最傷心,C++程序員最年老

說起我們對編程世界現有的刻板印象&#xff0c;你一定聽說過類似于沒有人喜歡用Java編碼或者使用C 都是老人家&#xff0c;等等這樣的話。為了分析這些刻板印象背后的真相&#xff0c;Trestle Technology的數據工程師寫了一個工具。 不知道你有沒有聽說過微軟的Project Oxford&…

mysql一些寫常用命令

參見pcttcnc2007博客騰飛 1.mysql的status信息命令: mysql> show global status; 2.可以列出mysql服務器運行各種狀態值&#xff0c;另外&#xff0c;查詢mysql服務器配置信息語句&#xff1a; mysql> show variables; 3.連接數 經 常會遇見”mysql: error 1040: too man…

計算機不小心刪除怎么找回桌面,如何將桌面上誤刪的文件找回

在如今工作電腦化的趨勢下&#xff0c;用戶都會在桌面上創建各種各樣的文件等&#xff0c;這些文件都是需要在工作中經常要進行各種操作的重要文件&#xff0c;那么頻繁的操作也會出現各種的意外情況等&#xff0c;如果不小心刪除了重要的文件該怎么恢復呢&#xff1f;想要恢復…

《編程原本 》一3.3 程序變換

3.3 程序變換 power0是有關算法的一個令人滿意的實現,它適用于運算的代價高于函數遞歸調用開銷的情況.本節要推導出一個迭代算法,它執行運算的次數和power0一樣.這里將要做一系列程序變換,這些變換也可以用在其他許多情況中.5 在本書后面的部分,通常將只給出算法的最終版本或幾…

Effective C++ .07 virtual析構函數的提供

主要講了&#xff0c; 1. virtual析構函數的作用與調用順序 2. 使用時機&#xff0c;并不是使用了繼承就要把基類的析構函數變為虛函數&#xff08;virtual&#xff09;&#xff0c;只有當用于多態目的時才進行一個virtual析構函數的定義。 3. 不要繼承那些沒有將析構函數定義為…

OnClickListener沖突的問題

OnClickListener沖突的問題 (2011-11-26 15:28:27) 轉載▼標簽&#xff1a; 雜談 分類&#xff1a; android學習記錄 import anfroid.view.View.OnClickListenerimport anfroid.content.DialogInterface.OnClickListener 這兩個東西要同時用的話&#xff0c;要使用以下方式&…

html 響應式 同一行,一行CSS實現各種響應式元素 – Fluidity

一行CSS實現各種響應式元素 – Fluidity3月 31, 2014評論SponsorFLUIDITY是一個極微小的CSS樣式表&#xff0c;壓縮版只有一行代碼&#xff0c;大小只有115個字節&#xff0c;它能實現圖像、文本、Canvas、Table表格以及iFrame框架的響應式功能。好用且實用&#xff01;這個響應…

玩C一定用得到的19款Java開源Web爬蟲

網絡爬蟲(又被稱為網頁蜘蛛&#xff0c;網絡機器人&#xff0c;在FOAF社區中間&#xff0c;更經常的稱為網頁追逐者)&#xff0c;是一種按照一定的規則&#xff0c;自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。 今天將為…

一元二次方程

轉載于:https://www.cnblogs.com/569114a/p/4179164.html