为何Java中承继决意是有害的.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
  为何Java中承继决意是有害的   大决意好的治理者象躲避瘟疫一样来防备使用OK承继(extends 关涉)。真实80%的代码应该彻底用interfaces写,而不是通过extends。“Java治理形式”一书详细阐述了怎么用接口承继代替OK承继。这篇文章形容治理者为何会这么作。   Extends是有害的;大约关于Charles Manson这个级其他不是,可是十足糟糕的它应该退职何笼统或许的时分被隐匿。“JAVA治理形式”一书花了很大的部分计议用interface承继代替OK承继。   好的治理者在他的代码中,大部分用interface,而不是详细的基类。本文计议为何治理者会如许适量,并且也先容一些基于interface的编程基础。   接口(Interface)和类(Class)?   一次,我列入一个Java用户组的集会。在集会中,Jams Gosling(Java之父)做动员人发言。在那令人难忘的QA部分中,有人问他:“假如你重新布局Java,你想扭转什么?”。“我想扔掉classes”他回答。在笑声平息后,它标明说,真正的题目不是由于class本身,而是OK承继(extends) 关涉。接口承继(implements关涉)是更好的。你应该尽笼统或许的防备OK承继。   获患了灵便性   为何你应该防备OK承继呢?第一个题目是熟谙的使用详细类名将你固定到特定的OK,给底层的扭转增多了不消要的艰难。   在目前的迅速编程门径中,核心是并行的治理和开发的观点。在你详细治理挨次前,你入手下手编程。这个武艺不同于古板门径的模式----古板的门径是治应该该在编码入手下手前OK----可是良多告捷的项目已经证实你大要更疾驶的开发高风致代码,相关于古板的陈陈相因的门径。可是在并行开发的核心是主意灵便性。你不得不以某一种门径写你的代码以至于必威体育精装版发明的必要大要尽笼统或许不有痛苦的归并到已有的代码中。   胜于OK你大约必要的特色,你只要OK你熟谙必要的特色,并且过火的对变更的包涵。假如你不有这类灵便,并行的开发,那简直不笼统或许。   关于Inteface的编程是灵便布局的核心。为了注明为何,让咱们看一下当使用它们的时分,会发生什么。考虑下面的代码:   f()   {   LinkedList list = new LinkedList();   //...   g( list );   }   g( LinkedList list )   {   list.add( ... );   g2( list )   }   假定一个关于疾驶究诘的必要被提出,以至于这个LinkedList不克不及够贪图。你必要用HashSet来代替它。在已有代码中,变更不克不及够部分化,因为你不光仅必要修正f()也必要修正g()(它带有LinkedList参数),并且还有g()把列表传递给的任何代码。象下面如许重写代码:   f()   {   Collection list = new LinkedList();   //...   g( list );   }   g( Collection list )   {   list.add( ... );   g2( list )   }   如许修正Linked list成hash,笼统或许只不过简单的用new HashSet()代替new LinkedList()。就如许。不有其他的必要修正的地方。   作为另一个例子,对照下面两段代码:   f()   {   Collection c = new HashSet();   //...   g( c );   }   g( Collection c )   {   for( Iterator i = c.iterator(); i.hasNext() )   do_something_with( i.next() );   }   和   f2()   {   Collection c = new HashSet();   //...   g2( c.iterator() );   }   g2( Iterator i )   {   while( i.hasNext() )   do_something_with( i.next() );   }   g2()门径那时大要遍历Collection的派生,就像你大要从Map中失掉的键值对。到底上,你大要写iterator,它发生发火数据,代替遍历一个Collection。你大要写iterator,它从测试的框架梗概文件中失掉消息。这会有弘大的灵便性。   耦合   关于OK承继,一个更加关头的题目是耦合---令人烦躁的请托,就是那种挨次的一部分关于另一部分的请托。全局变量提供经典的例子,证实为何强

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档