`
wusuoya
  • 浏览: 629360 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

继承与组合

 
阅读更多

白盒复用,黑盒复用

语言在继承上的设计带来了便利,这些便利在某些情况下恰恰又演变成了缺点

1.首先理解是什么,继承和组合的概念
2.继承的优点,但在一定条件下,优点反而是缺点,
    父类所有公共的属性和方法都被子类无条件继承,子类不能选择,封装性不好,有可能造成误用,父类实

现中的任何变化必然会导致子类发生
变化
    实际对象千变万化,若每一类的对象都有他们自己的类,类层次结构的迅速膨胀

继承 – 发生在编译时,因为它是静态的
代理或者组合 – 发生在运行时,因为它更加具有动态性和灵活性。

(主要是讲关系的确定时间)

Q.你有没有听说过“组合优于继承”这样的说法呢?如果听说过的话,那么你是怎么理解的呢?

A.继承是一种多态工具,而不是一种代码复用工具。有些开发者喜欢用继承的方式来实现代码复用,即使是在

没有多态关系的情况下。是否使用继承的规则是继承只能用在类之间有“父子”关系的情况下。

    不要仅仅为了代码复用而继承。当你使用组合来实现代码复用的时候,是不会产生继承关系的。过度使用

继承(通过“extends”关键字)的话,如果修改了父类,会损坏所有的子类。这是因为子类和父类的紧耦合

关系是在编译期产生的。
    不要仅仅为了多态而继承。如果你的类之间没有继承关系,并且你想要实现多态,那么你可以通过接口和

组合的方式来实现,这样不仅可以实现代码重用,同时也可以实现运行时的灵活性。

这就是为什么四人帮(Gang of Four)的设计模式里更倾向于使用组合而不是继承的原因。面试者会在你的答

案里着重关注这几个词语——“耦合”,“静态还是动态”,以及“发生在编译期还是运行时”。运行时的灵

活性可以通过组合来实现,因为类可以在运行时动态地根据一个结果有条件或者无条件地进行组合。但是继承

却是静态的。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics