考研复试1-接口和抽象类区别_第1页
考研复试1-接口和抽象类区别_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

详细解析Java中抽象类和接口的区2007-09-2812:17来源:整理作者:doublel责任编辑:方舟·yesky评论在Java语言中, class和interface是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 class和interface者在进行抽象类定义时对于 class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设理解class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并 class翻译而来,它表示的是一个抽象体,而 class为Java语言中用于定义抽象类的法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类OCP的读者一定知道,为了能够实现面向对象设计的一个最的原则OCP(Open-ClosedPrinciple),抽象类是其中的关键所从语法定义层面 class和在语法层面,Java语言对于 class和interface给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。使 class的方式定义Demo抽象类的方式如下classvoidmethod1();void…}interfaceDemointerfaceinterfaceDemo{voidmethod1();void…} class方式中,Demo可以有自己的数据成员,也可以有非 员方法,而在interface方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是staticfinal的,不过在interface中一般不定义数据成员),所有的成员方法都 的。从某种意义上说,interface是一种特殊形式的 从编程的角度来看 class和interface都可以用来实现"designby首先,class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系(Java转注)interface。也JavaJava对于多重继承的支持方面的一种折中考虑吧。其次,在classinterface在抽象类中不能定义默认行为还存在另一个比较严重的问题,那就是可能会造成上的麻烦。因为如果后来想修改类的界面(一般通过 class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会 class来实现的,那么可能就只需要修改定义在 class中的默的每一个派生类中,了"onerule,oneplace"原则,造成代码重复,同样不利于以 class和interface间进行选择时要非常的。从设计理念层面 class和 class和interface的区别,这些层 class和interface class在Java语言中体现了一种继承关系,要想使得继承同的。对于interface来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。为了使论述便于理解,下面将openclose,此时我们可以通过classinterface来定义使 class方式定义classDoor{voidvoid}interfaceinterfaceinterfaceDoor{voidopen();voidclose();}其他具体的Door类型可以extends使用 class方式定义的Door或者implements使用interface方式定义的Door。看起来好像使用 class和interface如果现在要求Door还要具有的功能。我们该如何设计针对该例子的类结构(classinterface反映在设计理念上的区别,其他方面无关的问题都做了简化或者忽略)?DooralarmclassDoor{voidopen();voidclose();voidalarm();}interfaceinterfaceDoor{voidopen();voidclose();voidalarm();}那么具有功能的AlarmDoor的定义方式如下classAlarmDoorextendsclassAlarmDoorextendsvoidopen(){…}voidclose(){…}void}classclassAlarmDoorimplementsDoor{voidopen(){…}voidclose(){…}void}这种方法了面向对象设计中的一个原则ISP(InterfaceSegregationPrinciple),在Door的定义中把Door概念本身固有的行为方法和另外一个概念"器"的Door这个概念的模块会因为"器"这个概念的改变(比如:修改alarm方法的参数)而改变,反之依然。既然open、close和alarm属于两个不同的概念,根据ISP原则应该把它们分别定 class方式定义;两个概念都使用interface方式定义;一个概念使用 class方式定义,另一个概念使用interface方式定义。Java语言不支持多重继承,所以两个概念都使用class方式定义interface方式来定义,那么就反映出两个问题:1、我们可能没有理解清楚问题领域,AlarmDoor在概念本质上到底是Door还是器?2、如果我们AlarmDoor在Door是一致的,那么我们在实现时就没有能够正确的揭示我们的设计意图,因为在这两个概念的定义上(均使用interface方式定义)反映不出上述含义。如果我们对于问题领域的理解是:AlarmDoorDoor,同时它有具有报classJava语言中表示一种继承关系,而继承关系在本质上是"is-a"关系。所Doorabstarctclass方式来定义。另外,AlarmDoor又具有功能,说明它又能够完成概念中定义的行为,所以概念可以通过interface方式定义。如下所示:classDoor{voidopen();voidclassDoor{voidopen();voidclose();}interfaceAlarm{voidalarm();}classAlarmDoorextendsDoorimplementsvoidopen(){…}voidclose(){…}void}设计意图。其实 class表示的是"is-a"关系,interface表示的是"like-a"关系,大认为AlarmDoor在概念本质上是器,同时又具有Door的功能,那么上述的定义方式小classJava语言中表示的是一种继承关系,一个类只能使用一次继承interface。 class中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是staticfinal的,不过在interface中一般不定义数据成员),所有的成员方法都是 class和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论