作者zanyking (遥远的旅人)
看板java
标题Re: [问题] 想请问interface的具体意义
时间Wed Jan 31 17:11:40 2007
我个人觉得这个标题有点怪。
"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