网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.手机操作系统及移动开发.
.什么是 Enterprise JavaBeans 组.
.关于在Eclipse下使用Subversion教.
.关于Java多线程技术中所有方法的.
.WirelessMessagingAPI(4).
.Java 中classspath 的默认值是什.
.浅析JavaScript实用的一些技巧.
.Java中引用,造型等问题解析.
.Java中使用DirectDraw.
.Tuxedo配置管理简要说明.
.IT的未来是Sun与微软之争?.
.Java中的构建器.
.关于Java Servlet编程应用基础分.
.JSTL 入门:访问SQL和XML内容.
.Java串行端口通讯技术.
.如何用Java实现Web服务器.
.J2EE中的设计模式.
.浅析Java语言中两种异常的差别.
.struts构建文件上传(一).
.J2ME 进度条与线程化模型实例解析.

选择Java接口还是抽象类

发表日期:2008-1-5



  选择Java接口还是抽象类
  
  作者:俞良松 本文选自:开放系统世界-赛迪网 2003年03月12日
  
  很多人有过这样的疑问:为什么有的地方必须使用接口而不是抽象类,而在另一些地方,又必须使用抽象类而不是接口呢?或者说,在考虑Java类的一般化问题时,很多人会在接口和抽象类之间犹豫不决,甚至随便选择一种。
  
  实际上接口和抽象类的选择不是随心所欲的。 要理解接口和抽象类的选择原则,有两个概念很重要:对象的行为和对象的实现。假如一个实体可以有多种实现方式,则在设计实体行为的描述方式时,应当达到这样一个目标:在使用实体的时候,无需具体了解实体行为的实现方式。也就是说,要把对象的行为和对象的实现分离开来。既然Java的接口和抽象类都可以定义不提供具体实现的方法,在分离对象的行为和对象的实现时,到底应该使用接口还是使用抽象类呢?
  
  通过抽象类建立行为模型
  
  在接口和抽象类的选择上,必须遵守这样一个原则:行为模型应该总是通过接口而不是抽象类定义。为了说明其原因,下面试着通过抽象类建立行为模型,看看会出现什么问题。
  
  假设要为销售部门设计一个软件,这个软件包含一个“发动机”(Motor)实体。显然无法在发动机对象中具体地描述发动机的方方面面,只能描述某些对当前软件来说重要的特征。至于发动机的哪些特征是重要的,则要与用户(销售部门)交流才能确定。
  
  销售部门的人要求每一个发动机都有一个称为马力的参数。对于他们来说,这是惟一值得关心的参数。基于这一判定,可以把发动机的行为定义为以下行为。
  
  行为1:查询发动机的马力,发动机将返回一个表示马力的整数。
  
  虽然现在还不清楚发动机如何取得马力这个参数,但可以肯定发动机一定支持这个行为,而且这是所有发动机惟一值得关注的行为特征。这个行为特征既可以用接口定义,也可以用抽象类定义。为了说明用抽象类定义可能出现的问题,下面用抽象类建立发动机的行为模型,并用Java方法描述行为1,代码如下:
  
  
  
  public abstract Motor{
  
  abstract public int getHorsepower();
  
  }
  
  
  
  在Motor抽象类的基础上构造出多种具体实现,例如A型发动机、B型发动机等,再加上系统的其它部分,最后得到1.0版的软件并交付使用。一段时间过去了,现在要设计2.0版的软件。在评估2.0版软件需求的过程中,发现一小部分发动机是电池驱动的,而电池需要一定的充电时间。销售部门的人希望能够通过计算机查阅充电时间。根据这一要求定义一个新的行为,如图1所示。
  
  行为2:查询电驱动发动机的充电时间,发动机将返回一个表示充电时间的整数。
  
  用Java方法来描述这个行为,代码如下:
  
  
  
  public abstract BatteryPoweredMotor extends Motor{
  
  abstract public int getTimeToRecharge();
  
  }
  
  
  
  在销售部门的软件中,电驱动发动机也以类的形式实现,但这些类从BatteryPoweredMotor而不是Motor派生。这些改动加入到2.0版软件之后,销售部门很满足。随着业务的不断发展,不久之后光驱动的发动机出现了。销售部门要求光驱动发动机需要一定光能才能运转,光能以流明(Lumen)度量。这个信息对客户很重要,因为下雨或多云的天气里,某些光驱动发动机可能无法运转。销售部门要求为软件增加对光驱动发动机的支持,所以要定义一个新的行为。
  
  行为3:查询光驱动发动机能够正常运转所需要的最小流明数,发动机返回一个整数。
  
  再定义一个抽象类并把行为3转换成Java方法,代码如下:
  
  
  
  public abstract SolarPoweredMotor extends Motor{
  
  abstract public int getLumensToOperate(); 
  选择Java接口还是抽象类
  
  作者:俞良松 本文选自:开放系统世界-赛迪网 2003年03月12日
  
  很多人有过这样的疑问:为什么有的地方必须使用接口而不是抽象类,而在另一些地方,又必须使用抽象类而不是接口呢?或者说,在考虑Java类的一般化问题时,很多人会在接口和抽象类之间犹豫不决,甚至随便选择一种。
  
  实际上接口和抽象类的选择不是随心所欲的。 要理解接口和抽象类的选择原则,有两个概念很重要:对象的行为和对象的实现。假如一个实体可以有多种实现方式,则在设计实体行为的描述方式时,应当达到这样一个目标:在使用实体的时候,无需具体了解实体行为的实现方式。也就是说,要把对象的行为和对象的实现分离开来。既然Java的接口和抽象类都可以定义不提供具体实现的方法,在分离对象的行为和对象的实现时,到底应该使用接口还是使用抽象类呢?
  
  通过抽象类建立行为模型
  
  在接口和抽象类的选择上,必须遵守这样一个原则:行为模型应该总是通过接口而不是抽象类定义。为了说明其原因,下面试着通过抽象类建立行为模型,看看会出现什么问题。
  
  假设要为销售部门设计一个软件,这个软件包含一个“发动机”(Motor)实体。显然无法在发动机对象中具体地描述发动机的方方面面,只能描述某些对当前软件来说重要的特征。至于发动机的哪些特征是重要的,则要与用户(销售部门)交流才能确定。
  
  销售部门的人要求每一个发动机都有一个称为马力的参数。
上一篇:JAVA数据对象应用程序接口Castor使用参考 人气:741
下一篇:浅谈JAVA中类的构造器 人气:820
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐