继承和组合联系和区别 - 技术分享 - 志盟培训
首页技术分享 继承和组合联系和区别

继承和组合联系和区别

更新时间:2017-04-18      作者:陈老师       阅读:1619

继承(Inheritance)是一种联结类与类的层次模型。指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;继承是一种 is-a 关系。

组合(Composition)体现的是整体与部分、拥有的关系,即 has-a 的关系。

一、继承

优点:

1、在继承中,子类自动继承父类的非私有成员(default类型视是否同包而定),在需要时,可选择直接使用或重写;

2、在继承中,创建子类对象时,无需创建父类对象,因为系统会自动完成;而在组合中,创建组合类的对象时,通常需要创建其所使用的所有类的对象。

缺点:

1、破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性;

2、支持扩展,但是往往以增加系统结构的复杂度为代价;

3、不支持动态继承。在运行时,子类无法选择不同的父类;

4、子类不能改变父类的接口。


二、组合

优点:

1、在组合中,组合类与调用类之间低耦合;而在继承中子类与父类高耦合;

2、可动态组合;

3、具有较好的可扩展性;

4、整体类可以对局部类进行包装,封装局部类的接口,提供新的接口 。

缺点:

1、整体类不能自动获得和局部类同样的接口;

2、创建整体类的对象时,需要创建所有局部类的对象。


组合与继承的区别和联系

继承 结构中,父类的内部细节对于子类是可见的。所以我们通常也可以说通过继承的代码复用是一种 白盒式代码复用 。(如果基类的实现发生改变,那么派生类的实现也将随之改变。这样就导致了子类行为的不可预知性;)

组合 是通过对现有的对象进行拼装(组合)产生新的、更复杂的功能。因为在对象之间,各自的内部细节是不可见的,所以我们也说这种方式的代码复用是 黑盒式代码复用 。(因为组合中一般都定义一个类型,所以在编译期根本不知道具体会调用哪个实现类的方法)

继承 ,在写代码的时候就要指名具体继承哪个类,所以,在 编译期 就确定了关系。(从基类继承来的实现是无法在运行期动态改变的,因此降低了应用的灵活性。)

组合 ,在写代码的时候可以采用面向接口编程。所以,类的组合关系一般在 运行期 确定。

选择:

1.除非考虑使用多态,否则优先使用组合。因为组合更安全,更简单,更灵活,更高效。

2.要实现类似”多重继承“的设计的时候,使用组合。

3.要考虑多态又要考虑实现“多重继承”的时候,使用组合+接口。

继承要慎用,其使用场合仅限于你确信使用该技术有效的情况。一个判断方法是,问一问自己是否需要从新类向基类进行向上转型。如果是必须的,则继承是必要的。反之则应该好好考虑是否需要继承。《 Java编程思想 》

只有当子类真正是超类的子类型时,才适合用继承。换句话说,对于两个类A和B,只有当两者之间确实存在 is-a 关系的时候,类B才应该继续类A。《 Effective Java 》

在线报名

志盟科技上海招聘

在线报名 联系我们

志盟科技深圳招聘

在线报名 联系我们

志盟科技北京招聘

在线报名 联系我们
联系我们

咨询热线:

咨询 QQ:517578         

就业学员

  • 就业学员

    姓名:郭凡凡 
    院校:阜阳师范学院
    就职:佳戴
    职位:软件工程师
    月薪:10000

  • 就业学员

    姓名:陈祥龙 
    院校:中北大学
    就职:美囤妈妈
    职位:软件工程师
    月薪:9000

  • 就业学员

    姓名:陈建伟
    院校:南昌航空大学
    就职:SONY
    职位:嵌入式工程师
    月薪:8000

×
×
  • *真实姓名
  • *联系手机
  • *上课地址
  •    QQ号码

温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一报名服务。

×
  • *真实姓名
  • *联系手机
  • *联系邮箱
  • * QQ号码

温馨提示:请保持手机畅通,咨询老师将为您提供专属的一对一的服务。

本站由 宽敬科技——创新企业的建站运营顾问 提供支持