继承和组合的适用场景总结

首先需要了解继承和组合两者各自的概念和特点

一、继承

简单来说,A类继承B类,说明A是B的一种,A在B的基础上做扩展,A能使用B中的除私有成员外的所有元素和方法,且由A派生的其他类最后可通过B类容器存储调用,实现不同派生类的虚函方法。

举例来说,人是基类,小孩是人的派生类,大人也是人的派生类,人类中的走是一个虚函数,小孩中的走是爬着走,大人是两条腿走,小孩和大人这两个派生类都属于人,都需要走路,只是走路的方式不同,我们就可以用继承来实现。

二、组合类

组合类就像是有许多零件组建成一台能工作的机器,零件为机器提供功能,但又不只属于这台机器,只是它的一个部分,所以机器不能从零件中派生出来,只能组合起来。

需要注意,组合类中的构造函数需要使用初始化链表方式去初始化。

三、继承的优点和缺点

优点

容易进行新的实现,因为其大多数可从基类继承而来。

易于修改或扩展那些被复用的方法。 

创建子类的对象时,无须创建父类的对象    

缺点

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

“白盒”复用,因为父类的内部细节对于子类而言通常是可见的。 

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

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

子类不能改变父类的接口,但子类可以覆盖父类的接口        

四、组合类的优点和缺点

优点

容器类仅能通过被包含对象的接口来对其进行访问。 

“黑盒”复用,因为被包含对象的内部细节对外是不可见。 封装性好。 

 实现上的相互依赖性比较小。 

 每一个类只专注于一项任务。 

 通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。

缺点

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

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

五、继承和组合的适用场景

继承体现的是一种专门化的概念而组合则是一种组装的概念

另外确定是组合还是继承,最清楚的方法之一就是询问是否需要新类向上映射,也就是说当我们想重用原类型作为新类型的内部实现的话,我们最好自己组合,如果我们不仅想重用内部实现而且还想重用接口的话,那就用继承。

六、规则

一般对于大型程序来说,优先使用组合,组合还有一个优点就是有助于保持每个类被封装,并被集中在单个任务上(类设计的单一原则)。这样类的层次结构不会扩大,一般不会出现不可控的庞然大类。而类的继承就可能出来这些问题,所以一般编码规范都要求类的层次结构不要超过3层。但具体使用还是需要看适用场景和需求灵活去运用。


                                                                               


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值