`
jianqicui
  • 浏览: 10947 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

组合还是继承

 
阅读更多

对于类的扩展,在面向对象的编程过程中,我们首先想到的是类的继承,由子类继承父类,从而完成了对子类功能的扩展。但是,面向对象的原则告诉我们,对类的功能的扩展要多用组合,而少用继承。其中的原因有以下几点:


第一、子类对父类的继承是全部的公有和受保护的继承,这使得子类可能继承了对子类无用甚至有害的父类的方法。换句话说,子类只希望继承父类的一部分方法,怎么办?


第二、实际的对象千变万化,如果每一类的对象都有他们自己的类,尽管这些类都继承了他们的父类,但有些时候还是会造成类的无限膨胀。


第三、继承的子类,实际上需要编译期确定下来,这满足不了需要在运行内才能确定对象的情况。而组合却可以比继承灵活得多,可以在运行期才决定某个对象。

分享到:
评论

相关推荐

    10丨理论七:为何说要多用组合少用继承?如何决定该用组合还是继承?1

    其中,“组合优于继承”是一条广为流传的原则,意味着在设计软件时,我们应该优先考虑使用组合(Composition)而不是继承(Inheritance)。这条原则的提出主要是为了解决继承带来的潜在问题,如代码的可维护性、可...

    组合和继承的联合

    因此,选择使用组合还是继承应根据具体需求权衡,通常建议优先考虑组合,因为它提供了更高的灵活性和封装性。 总的来说,理解和熟练掌握组合和继承的联合使用是提升C++编程能力的关键步骤。通过合理的设计,我们...

    再论组合和继承

    在实际编程中,选择继承还是组合通常取决于具体的需求和设计原则。遵循“合成复用原则”(Composite Reuse Principle),即优先考虑使用组合,除非有明显的理由需要继承,可以避免过度依赖继承导致的复杂性。 结合...

    ZhiyuSun#geektime#10【面向对象】多组合少继承1

    所以,从理论上讲,通过组合、接口、委托三个技术手段,我们完全可以替换掉继承,在项目中不用或者少用继承关系,特别是一些复杂的继承关系。如何判断改用组合还是继承如果

    Java组合与继承之间的选择

    **选择组合还是继承?** - 当需要创建一个与现有类非常相似的新类时,继承可能是合适的选择,因为它可以快速复用和扩展已有功能。 - 当希望新类使用现有类的部分功能,而不是整个接口,或者需要保持设计的灵活性时...

    C++学习笔记——继承和组合

    根据给定的文件标题、描述、标签以及部分内容,本文将深入探讨C++中的两个核心概念:继承与组合。这两种机制都是面向对象编程中用于实现代码重用的重要手段,但它们在设计模式、实现细节以及适用场景上存在显著差异...

    UML学习之依赖_关联_聚合_组合_继承

    ### UML学习之依赖、关联、聚合、组合与继承 #### 一、泛化(Generalization) **概念:** 泛化表示的是类与类之间的继承关系、接口与接口之间的继承关系,或者是类对接口的实现关系。在UML中,泛化关系通常用一个带...

    Java面向对象的设计原则

    在选择组合还是继承时,应该考虑以下几点:如果类间的关系更符合“是一个…的特殊类型”的概念,而不只是“是一个由…所扮演的角色”,那么继承可能是合适的。如果类的实例不需要在运行时转化为其他类的对象,且扩展...

    一些面向对象的设计原则.doc

    面向对象设计原则是软件工程领域中的一套指导思想,旨在帮助开发者...通过这些原则和示例,我们可以看到,在面向对象设计中,选择组合还是继承应当基于具体场景的需求和规则,以构建更加健壮、灵活和可维护的系统架构。

    编程思想14章继承和组合的介绍

    在编程世界中,继承与组合是面向对象编程的两个核心概念,它们允许我们构建复杂、可复用且灵活的软件系统。本章“编程思想14章:继承和组合的介绍”深入探讨了这两个概念,旨在帮助开发者更好地理解和运用它们。 ...

    ch12 组合与继承.ppt

    【组合与继承】 在面向对象编程中,组合和继承是两种重要的机制,它们允许程序员创建复杂的类结构,实现代码的重用和扩展。 **组合**指的是一个类包含另一个类的对象作为其成员变量,这种关系通常被称为“has-a”...

    面向对象设计/编程的四大法则

    在选择使用组合还是继承时,应考虑Coad规则:只有当子类确实表示“是一个…的特殊类型”,且无需转换,扩展而不是重写或废除父类职责,不扩展工具类,并且在问题域中代表特定角色、交易或设备时,继承才是合适的。...

    浅谈JS继承_寄生式继承 & 寄生组合式继承

    总结来说,寄生式继承用于创建对象副本并增强,而寄生组合式继承则通过更高效的方式实现了属性和方法的继承,避免了组合继承的缺点。这两种模式都是JavaScript实现面向对象编程的重要工具,理解它们的原理和应用对于...

    Point&Line的类用继承和组合模版完成

    Line是继承Point类的,完成了一些小功能

    js寄生组合继承示例

    JavaScript寄生组合继承实现代码示例

    android 7.Android里的类别继承及对象组合

    在Android开发中,类别继承和对象组合是两种重要的面向对象编程概念,它们在构建复杂的UI和应用程序逻辑中起到关键作用。 首先,让我们来看看类别继承。在Android框架中,类继承通常涉及Android组件,如Activity、...

    03_组合继承.html

    03_组合继承.html

    JavaScript 继承机制详解及其实现技巧-基于组合继承与圣杯模式的技术探讨

    内容概要:本文详细介绍了 JavaScript 中几种经典的继承方式,重点解析了组合继承和圣杯模式两种常见做法。首先阐述了传统构造函数加原型链的方式来模拟类式的多层继承关系及其潜在问题;接着引入更为优雅且高效的...

Global site tag (gtag.js) - Google Analytics