美文网首页
组合VS继承

组合VS继承

作者: PaulLuv | 来源:发表于2018-03-17 17:39 被阅读35次

在Effective Java中明确有提到一种思想就是组合优先于继承。实际中我们可以这样理解,组合是把代码摊开,而继承是把代码垒起来。很明显,摊开的代码更容易理解、扩展,耦合度更低。不过如果B类是A类的抽象,这时候继承更适用一点。

面对不同的场景,使用组合还是继承,需要看是has-a还是is-a关系。
来看对比示例:

class Animal{  

    private void beat(){  
        System.out.println("心脏跳动...");  
    }  

    public void breath(){  
        beat();  
        System.out.println("呼吸中...");  
    }  

}  

class Bird extends Animal{  

    //创建子类独有的方法fly()  
    public void fly(){  
        System.out.println("我是鸟,我在天空中自由的飞翔...");  
    }  

}  
 
class Wolf extends Animal{  

    //创建子类独有的方法run()  
    public void run(){  
        System.out.println("我是狼,我在草原上快速奔跑...");  
    }  

}  
动物都有心跳与呼吸,所以面对不同的动物,这是is-a关系,应该使用继承。
class 蔬菜{
    public void 炒青菜(){}
}

class 水果{
    public void 制作果盘(){}
}

class 汤{
    public void 制作紫菜汤(){}
}
...
早中晚餐可以可以吃青菜、水果或者喝汤中的任意一种,这时候就应该用组合。

组合与继承的区别如下:

组合 继承
has-a关系 is-a关系
运行期决定 编译器决定
不破坏封装,整体和局部松耦合 破坏封装,子类依赖父类
支持扩展,随意增加组合类 只能继承一个父类,必须包含所有方法,增加系统复杂性
动态选择组合类方法 复用父类方法

相关文章

  • 组合VS继承

    在Effective Java中明确有提到一种思想就是组合优先于继承。实际中我们可以这样理解,组合是把代码摊开,而...

  • 组合VS继承

    React有很强大的组合机制,我们也建议你用组合的方式书写代码而不是和java等等思想一样用继承的方式写代码,这样...

  • react 组合vs继承

    react 提倡使用组合而不是继承来复用代码,具体原因呢,我现在还不知道-_-!好,先看看什么情况下我们会用到组合...

  • java 组合VS继承

      在阅读Effective Java中的第16条时发现了一个有趣的机制或者说是模式,那就是组合(文中翻译为复用,...

  • React组合 vs 继承

    组合 React 有十分强大的组合模式。我们推荐使用组合而非继承来实现组件间的代码重用。有些组件无法提前知晓它们子...

  • (四)react组合 vs 继承

    React 有十分强大的组合模式。我们推荐使用组合而非继承来实现组件间的代码重用1、组件使用一个特殊的 child...

  • 10.组合vs继承

    1. 为什么不推荐使用继承? 虽然继承可以解决代码复用等的问题,但如果继承层次过深、过复杂,也会影响到代码的可维护...

  • React笔记11(组合 vs 继承)

    React具有强大的组合模型,我们建议使用组合而不是继承来复用组件之间的代码。 本章节中,将围绕几个React新手...

  • 九. React的组合 VS 继承(Composition vs

    React 拥有一个强大的组合模型,官网建议使用组合而不是继承以实现代码的重用。 一. 包含 一些组件在设计前无法...

  • react 文档学习

    1,组合 vs 继承JSX 标签中的所有内容都会作为一个 children prop 传递给 子 组件 少数情况下...

网友评论

      本文标题:组合VS继承

      本文链接:https://www.haomeiwen.com/subject/xqmjqftx.html