继承组合区别以及优缺点

继承和组合

继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。

组合是一种has-a的关系。逻辑上A是B的“一部分”(a part of),但是不允许B从A派生,而是要用A和其它东西组合出B

优先使用对象组合,而不是类继承 。

继承优点:继承允许根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称为白箱复用(white-boxreuse)。术语“白箱”是相对可视性而言:在继承方式中,基类的内部细节对子类可见 。容易进行新的实现,因为其大多数可继承而来。 易于修改或扩展那些被复用的实现。

优点:
1.支持扩展,通过继承父类实现,但会使系统结构较复杂
2. 易于修改或扩展被复用的代码

继承缺点:继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。派生类和基类间的依赖关系很强,耦合度高。当父类的实现更改时,子类也不得不会随之更改。

缺点:
1.代码白盒复用,父类的实现细节暴露给子类,破坏了封装性
2.当父类的实现代码修改时,可能使得子类也不得不修改,增加维护难度。
3.子类缺乏独立性,依赖于父类,耦合度较高
4.不支持动态拓展,在编译期就决定了父类

组合优点:对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复用(black-box reuse),因为对象的内部细节是不可见的。对象只以“黑箱”的形式出现。 组合类之间没有很强的依赖关系,被包含对象与容器对象之间的依赖关系比较少,优先使用对象组合有助于保持每个类被封装。组合的耦合度低,代码维护性好。通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义组合。

优点:
1.代码黑盒复用,被包括的对象内部实现细节对外不可见,封装性好。
2.整体类与局部类之间松耦合,相互独立。
3.支持扩展
4.每个类只专注于一项任务
5.支持动态扩展,可在运行时根据具体对象选择不同类型的组合对象(扩展性比继承好)

组合缺点

缺点:
1.创建整体类对象时,需要创建所有局部类对象。导致系统对象很多。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值