关于面向对象“继承”的理解

面向对象三大精神支柱,首当其冲的是“继承”!

  继承从代码复用的角度来说,特别好用,也特别容易被滥用和被错用。不恰当地使用继承导致的最大的一个特征就是高耦合(要补充一点,耦合是一个特征,虽然大部分情况是缺陷的特征,但是当耦合成为需求的时候,耦合就不是缺陷)

  代码复用也是分类别的,如果当初只是出于代码复用的目的而不区分类别和场景,就采用继承是不恰当的。

  就目前大多数的开发任务来看,继承出现的场景不多,主要还是代码复用的场景比较多,然而通过组合去进行代码复用显得要比继承麻烦一些,因为组合要求你有更强的抽象能力,继承则比较符合直觉。然而从未来可能产生的需求变化和维护成本来看,使用组合其实是很值得的。另外,当你发现你的继承超过2层的时候,你就要好好考虑是否这个继承的方案了,第三层继承正是滥用的开端。确定有必要之后,再进行更多层次的继承。


继承是紧耦合的一种模式,主要的体现就在于牵一发动全身。体现在两个方面:

(1)第一种类型的问题是改了一处,到处都要改,但解决方案还算方便

(2)第二种类型的问题是代码复用的时候,要跟着把父类以及父类所有的相关依赖也复制过去,高耦合在复用的时候造成了冗余。

解决方案是:用组合替代继承!

  其实大部分通过代码复用来选择继承的情况,其实都是变成组合比较好。

那什么时候用继承比较好呢?

  貌似实在是没什么地方非要用继承不可的。但事实上使用继承,我们得要分清楚层次,使用继承其实是如何给一类对象划分层次的问题。在正确的继承方式中,父类应当扮演的是底层的角色,子类是上层的业务。

使用继承的三大要点

要点1:父类只是给子类提供服务,并不涉及子类的业务逻辑

要点2:层级关系明显,功能划分清晰,父类和子类各做各的。  其实和要点1差不多

要点3:父类的所有变化,都需要在子类中体现,也就是说此时耦合已经成为需求,毕竟继承体现的是is-a关系

 

某位经验人的态度是:万不得已不要用继承,优先考虑组合!这也恰恰就是:『组合大于继承』(Composition over Inheritance)的观点!

 

最后网上dang下来的一张图,你们看了有啥感想不?

缩略图

 

转载于:https://www.cnblogs.com/hansonwang99/p/5032952.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值