Re: [問題] 想請問interface的具體意義

看板java作者 (遙遠的旅人)時間17年前 (2007/01/31 17:11), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串28/29 (看更多)
我個人覺得這個標題有點怪。 "interface的『具體』意義"?這難道不是一個oxymoron嗎? 今天就是不希望太『具體』,才要以interface這樣抽象的東西來描述概念。 所以,比起『具體意義』,我覺得不如仔細思考interface在各種方面使用手法上 的差異更能了解interface的本質。 以我個人而言,我比較不喜歡:『interface是抽象的class』這樣的說法,並不是 說這樣的解釋是錯的,而是在使用上,這樣的想法限制了使用interface的方式。 我比較喜歡說:interface是『契約』。還是一種憑票即付的契約。 今天不管是誰簽了這玩意,我就擁有拿著這份契約要求某種行為被執行的權利。 至於對方到底是個什麼牛鬼蛇神,我不在意。 以下是一些用法: CASE 1:implements某種特性行為 例如有個calss叫Runner,我們認為它在語意上應該有Runnable的性質。 CASE 2:定義一個抽象化的框架模型 一個interface A定義了許多行為,而這些行為所操作的Args也是interface 例如Painter draw(Shap a) CASE 3:聲明、或標記一個class 例如serializable聲明一個class可以被序列化。 例如今天想透過Reflection機制監控物件的執行,可考慮對想監控的物件 class標上Monitored。再丟給Proxy Factory作InvokationHandler的包裝。 CASE 4:與inner class的概念合作,徹底發揮『契約』的概念。 一個class T 平常並不具備A性質,但在B方法中我們需要操作一個具A性質的 物件,且我們希望這個A性質+B方法會隱性、封裝的操作、使用T的資料。 例如Callback event Model的JAVA實現。(寫AWT Swing的人應該很清楚) T對X Process傳入一個anonymous inner class is new A,並且將T該做哪些事 寫在這份A的 Function implementation 中,則當X Process 中event Fire時, Listener清單中與X簽了A的T就必須執行當初的『匿名約定』。 -- JAVA 是一個靜態型別reference指定、強物件型別判定的語言。 屬於類C/C++族。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.85.116.116
文章代碼(AID): #15m5rFwW (java)
討論串 (同標題文章)
文章代碼(AID): #15m5rFwW (java)