java中继承的好处是什么,在组合和继承中该如何取舍?

关注者
38
被浏览
23,332

8 个回答

1.除非考虑使用多态,否则优先使用组合。

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

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

合 关 系

优点:不破坏封装,整体类与局部类之间松耦合,彼此相对独立

优点:具有较好的可扩展性

优点:支持动态组合。在运行时,整体对象可以选择不同类型的局部对象

优点:整体类可以对局部类进行包装,封装局部类的接口,提供新的接口


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

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


继 承 关 系

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

优点:子类能自动继承父类的接口


缺点:子类不能改变父类的接口

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

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

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


举几个典型的继承的问题

空实现,破坏封装性,想想你的代码中是不是有这样的子类


多重继承,只是为了扩展不同的实现,比如有任务,上传继承自任务,备份任务继承自上传任务,相册备份和文件备份继承自备份任务,那个代码层次很深代码阅读起来很麻烦,不容易维护。


没法修改父类的行为,其实也是可以的,只不过写起来好麻烦各种函数封装,然后重写,比如父类的a->b->c的业务,在你这里要成为a->c->b了