zoukankan      html  css  js  c++  java
  • 继承和组合的区别

    首先,今天面试的时候被问到继承和组合的区别时没弄清特来写个随笔记录一下。 

          既然要详细了解咱们就从根源一步一步的看过来,不只是为了应付面试。好了废话不多说了,请看下面的介绍。希望对你有帮助!

          讲组合与继承就不得不将复用类了。复用代码是Java众多引人注目的功能之一。但是想成为机具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,他还必须能够做更多的事情

          上述方法常为C这类过程语言所使用,但收效并不是很好。正如Java中所有事物一样,问题解决都是围绕着类展开的。可以通过创新类来复用代码,而不必再从头开始编写。可以使用别人已开发并调试好的类。

      此方法的窍门在于使用类而不是破坏现有程序代码。读者将会在本章中看到两种达到这一目的的方法。第一种方法非常直观:只需要在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成的,所以这种方法称为组合。该方法只是复用了现有程序代码的功能,而非它的形式。

      第二种方法则更细致一些,它按照现有类的类型来创建新类。无需改变现有类的形式,采用现有类的形式并在其中添加新代码。这种神奇的方式称为继承,而且编译器可以完成其中大部分工作。继承是面向对象的程序设计的基石之一。

      就组合和继承而言,其语法和行为大多好似相似的。由于它们是利用现有类型生成新类型,所以这样做极富意义。

      大概就是这样,你们如需更详细的代码解读可以联系我,给我留言。

      总结

      继承和组合都能从现有类型生成新类型。组合一般是将现有类型作为新类型底层实现的一部分来加以复用,而继承复用的是接口。

      在使用继承时,由于导出类具有基类接口,因此它可以向上转型至基类,这对多态来讲至关重要。

      尽管面向对象编程对继承极力强调,但在开始一个设计师,一般应优先选择使用组合(或者可能是代理),只在确实必要时才使用继承。因为组合更具灵活性。此外,通过对成员类型使用继承技术的添加技巧,可以在运行时改变那些成员对象的类型和行为。因此,可以在运行时改变组合而成的对象的行为。

      在设计一个系统时,目标应该是找到或创建某些类,其中每个类都具有具体的用途,而且既不会太大(包含太多的功能而难以复用),也不会太小(不添加其他功能就无法复用)。如果你的设计变得过于复杂,通过将现有类拆分为更小的部分而添加更多的对象,通常会有所帮助。

      当你设计一个系统时,应该认识到程序开发是一种增量过程,犹如人类的学习一样,这一点很重要。程序开发依赖于实验,你可以尽自己所能去分析,但当你开始执行一个项目是,你任然无法知道所有的答案。如果将项目视作是一种有机的、进化着生命体而去培养,而不是打算像盖摩天大楼一样快速见效,就会获得跟多的成功和更迅速的回馈。继承与组合正是在面向对象程序设计中使得你可以执行这种式样的最基本的两个工具。

      也许以上你还不太明白,在下面我引用其他的总结:

      组合是has a的关系 
      继承是is a的关系

     

      引用一句老话应该更能分清继承和组合的区别:组合可以被说成“我请了个老头在我家里干活” ,继承则是“我父亲在家里帮我干活"。

     

      总结

      1.除非考虑使用多态,否则优先使用组合。
      2.要实现类似”多重继承“的设计的时候,使用组合。
      3.要考虑多态又要考虑实现“多重继承”的时候,使用组合+接口。

           

  • 相关阅读:
    mongodb分布式查询
    MongoDB JAVA API Filters
    mongodb.conf配置文件详解
    mongodb安装配置
    Elasticsearch-2.3.x填坑之路
    C++对象模型详解
    关于虚函数的那些事儿
    关于B树的一些总结
    动态规划问题
    C中的qsort函数和C++中的sort函数的理解与使用
  • 原文地址:https://www.cnblogs.com/leixiaochen/p/7576860.html
Copyright © 2011-2022 走看看