Re: [問題] 想請問interface的具體意義
我個人覺得這個標題有點怪。
"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
討論串 (同標題文章)
完整討論串 (本文為第 28 之 29 篇):