• java中继承和组合的区别


    子类继承父类,父类的所有属性和方法都可以被子类访问和调用。组合是指将已存在的类型作为一个新建类的成员变量类型,又叫“对象持有”。

    通过组合和继承,都可以实现系统功能的重用和代码的复用。但是,继承和组合也一些区别:

    区别1、子类继承父类后,子类可以根据自己的需求重写父类方法的实现细节,也就是说,父类方法的实现细节对子类是可见的,所以继承又被称为“白盒复用“。

    而将部分类组合成整体类时,只要求建立一个好的接口,整体类和部分类之间不会关心各自的实现细节,所以被称为“黑盒复用”。

    区别2、继承是在编译时刻静态定义的,即是静态复用,在编译后子类和父类的关系就已经确定了。而组合是运用于复杂的设计,它们之间的关系是在运行时候才确定的,即在对对象没有创建运行前,整体类是不会知道自己将持有特定接口下的哪个实现类。在扩展方面组合比继承更具有广泛性。

    区别3、继承中子类会重写父类的某些方法的实现,设计模式中认为这是一种破坏了父类的封装性的表现。这个结构会导致的结果是父类实现的任何变化,必然导致子类的改变。然而组合这不会出现这种现象。

    对象的组合还有一个优点就是有助于保持每个类被封装,并被集中在单个任务上(类设计的单一原则)。这样类的层次结构不会扩大,一般不会出现不可控的庞然大类。而类的继承就可能出来这些问题,所以一般编码规范都要求类的层次结构不要超过3层。组合是大型系统软件实现即插即用时的首选方式。

    “优先使用对象组合,而不是继承”是面向对象设计的第二原则。

    理想情况下,我们不需要创建新的组件来完成代码复用,而只需要通过对象组合的方法来拼装已存在的组件以获取新的功能。但这种情况很少出现,因为在实际情况中,现有的构建总是不够,而通过继承来复用代码往往要比通过组合对象容易得多。所以,继承和组合这两种方法并存于实际的软件开发过程中。

  • 相关阅读:
    第14章 位图和位块传输_14.1-14.3 位图基础
    第13章 使用打印机_13.2 打印图形和文字
    第13章 使用打印机_13.1 打印基础
    第12章 剪贴板_12.3 实现一个剪贴板查看器
    第12章 剪贴板_12.2 剪贴板的高级用法
    第12章 剪贴板_12.1 剪贴板的简单用法
    第11章 对话框_11.3 通用对话框
    第11章 对话框_11.2 非模态对话框
    第11章 对话框_11.1 模态对话框
    第5章 作业和进程池(2)
  • 原文地址:https://www.cnblogs.com/shakinghead/p/7452926.html
Copyright © 2020-2023  润新知