- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JAVA抽象机制
1.????? 抽象类和接口的区别所谓抽象类是用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象;所谓接口,相当于电源插座,可插入构件相当于电器。可插入构件的关键在于存在一个公用的接口,以及每个构件都实现了这个接口。接口是实现构件的可插入性的关键。1.1.?? 从语法层区别抽象类和接口从语法层来讲,Java语言对于抽象类和接口给出了不同的定义方式,下面以定义一个名为Demo的抽象类为例来说明这种不同。Demo抽象类的定义方式如下:abstract class Demo {abstract void method1();abstract void method2();…}Demo的接口定义方式如下:interface Demo {void method1();void method2();…}在抽象类的定义中,Demo可以有自己的数据成员,也可以有非abstract的成员方法,而在接口的定义中,Demo只能够有static final数据成员,所有的成员方法都是abstract的。从某种意义上说,接口是一种特殊形式的抽象类。从编程的角度来看,首先,抽象类和接口的继承规则不同,抽象只允许单继承,而一个类却可以实现多个接口。接口对于多重继承的支持方面的一种折中考虑;其次,在抽象类的定义中,可以赋予方法的默认行为,而在接口的定义中,方法不能拥有默认行为,必须使用委托,从某种意义上来说,接口比抽象类更为抽象化。1.2.?? 从设计层上理解抽象类和接口上面主要从语法层的角度论述了抽象类和接口的区别,这些层面的区别是比较低层次的、非本质的。本小节将从这个设计层进行分析理解二者概念的本质。抽象类在Java语言中体现了一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在Is-A关系,即父类和子类在概念本质上应该是相同的。对于接口来说则不然,接口并不要求实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已。考虑这样一个例子,假设在有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通过抽象类或者接口来定义一个表示该抽象概念的类型,定义方式分别如下所示:Door抽象类的定义方式如下:abstract class Door {abstract void open();abstract void close();}Door的接口定义方式如下:interface Door {void open();void close();}其他具体的Door类型可以extends使用抽象类方式定义的Door或者implements使用接口方式定义的Door。看起来好像使用抽象类和接口没有大的区别。如果现在要求Door还要具有报警的功能。下面将罗列出可能的解决方案,并从设计层对方案进行分析。解决方案一:简单的在Door的定义中增加一个alarm方法,如下:?abstract class Door {abstract void open();abstract void close();abstract void alarm();}或者interface Door {void open();void close();void alarm();}那么具有报警功能的AlarmDoor的定义方式如下:class AlarmDoor extends Door {void open(){…}void close(){…}void alarm(){…}}或者class AlarmDoor implements Door{void open(){…}void close(){…}void alarm(){…}}这种方法违反了接口隔离原则,在Door的定义中把Door概念本身固有的行为方法和另外一个概念“报警器”的行为方法混在了一起。这样引起的一个问题是那些仅仅依赖于Door这个概念的模块会因为“报警器”这个概念的改变(比如:修改alarm方法的参数)而改变,反之依然。解决方案二:既然open、close和alarm属于两个不同的概念,根据接口隔离原则应该把它们分别定义在代表这两个概念的抽象类中。定义方式有:这两个概念都使用抽象类方式定义;两个概念都使用接口方式定义;一个概念使用抽象类方式定义,另一个概念使用接口方式定义。显然,由于Java语言不支持多重继承,所以两个概念都使用抽象类方式定义是不可行的。后面两种方式都是可行的,但是对于它们的选择却反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理。如果两个概念都使用接口方式来定义,那么就反映出两个问题:第一,我们可能没有理解清楚问题领域,AlarmDoor在概念本质上到底是Door还是报警器?第二,如果
您可能关注的文档
最近下载
- 2024年天津市高考地理一轮复习答题模板专题精讲精练6 人口类综合题 .pdf VIP
- DB64 1522.1-2024养老机构安全应急处置规程 第1部分:老年人意外.pdf VIP
- 《食品科学概论》全套教学课件.pptx
- GB51158-2015 通信线路工程设计规范.docx VIP
- 电机检修方案.doc VIP
- 一种高油脱盐乳清配料粉及其生产工艺.pdf VIP
- 日文简历履历书模板大全.pdf VIP
- 入团志愿书电子版其它工作范文实用文档-入团志愿书电子版.pdf VIP
- TZJ 3001-2017 铁路基本建设工程设计概(预)算费用定额(完整版).doc.docx VIP
- 广州市番禺区东涌中学校本教材系列.doc VIP
文档评论(0)