JR 精品文章 - 什么时候应当使用interface?什么时候应当使用abstract class?
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » Java语言深入 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
什么时候应当使用interface?什么时候应当使用abstract class?
maXiaoKe 转贴   更新:2007-12-24 11:22:09  版本: 1.0   

--以下内容转载于CNBLogs 我最近也在为什么时候该用接口什么时候该用抽象类苦恼,老实说,对语言(language specification)来说,我确实可以说我“精通C#”,但这什么时候该用呢?

这篇文章本身也是在说language specification,幸好,下边的一篇评论写到了,实在万幸感谢dunai。

“什么时候应当使用interface,什么时候应当使用abstract class。如果你是个有一年经验的java/C#程序员,你或许已经“感悟”到其中的差异但又讲不清楚。我这里试着讲清楚些。 
         1。从类的层次结构上看,抽象类通常是在层次的顶端,但在实际的设计实践当中,抽象类应当是最后出现的。为什么?实际上抽象类的获取有点像数学中的提取公因式:ax+bx+cx,x就是抽象类,如果你没有前面的式子,你怎么知道x是不是公因式呢?在这点上,也符合人们认识世界的过程,先具体后抽象。因此在设计过程中如果你得到大量的具体概念并从当中找到其共性时,这个共性的集合就是抽象类应当是没错的。 
2。interface从表面上看,和抽象类很相似,但用法完全不同。它的基本功能就是把一些毫不相关的类(概念)集合在一起形成一个新的、可集中操作的“新类”。我给学生的一个典型例子就是“司机”。谁可以当司机?谁都可以,只要领取了驾照。所以我不管你是学生,白领、蓝领还是老板,只要有驾照就是司机。 
interface Driver { 
Licence getDriverLicence(); 


class StudentDriver extends Student implements Driver { 

class WhtieCollarEmployeeDriver extends WhtieCollarEmployee implements Driver { 

class BlueCollarEmployeeDriver extends BlueCollarEmployee implements Driver { 

class BossDriver extends Boss implements Driver { 


当我定义了“汽车”类后,我就可以指定“司机”了。 

class Car { 
setDriver(Driver driver); 

这时候,Car的对象并不关心这个司机到底是干什么的,他们的唯一共同点是领取了驾照(都实现了DriverLicence接口)。这个,应当是接口最强大的地方也是抽象类无法比拟的。 

总结:抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。至于他们在各个语言中的句法,语言细节并不是我关心的重点。 ”


版权声明  
本篇文章对您是否有帮助?  投票:         投票结果:     16       1
作者其它文章: 作者全部文章
评论人:oppe 发表时间: Mon Dec 24 15:40:15 CST 2007
 [good]
评论人:Ly_JR 发表时间: Fri Dec 28 15:45:46 CST 2007
写的不错[good][good][good]

这个文章共有 2 条评论
主题: Google面试题解说性能之一:字符串运算VS数字运算 上一篇文章
返回文章列表 返回〔Java语言深入〕
下一篇文章 主题: JAVA 的多线程浅析


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号