合 关 系
优点:不破坏封装,整体类与局部类之间松耦合,彼此相对独立
优点:具有较好的可扩展性
优点:支持动态组合。在运行时,整体对象可以选择不同类型的局部对象
优点:整体类可以对局部类进行包装,封装局部类的接口,提供新的接口
缺点:整体类不能自动获得和局部类同样的接口
缺点:创建整体类的对象时,需要创建所有局部类的对象
继 承 关 系
优点:创建子类的对象时,无须创建父类的对象
优点:子类能自动继承父类的接口
缺点:子类不能改变父类的接口
缺点:破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性
缺点:不支持动态继承。在运行时,子类无法选择不同的父类
缺点:支持扩展,但是往往以增加系统结构的复杂度为代价
举几个典型的继承的问题
空实现,破坏封装性,想想你的代码中是不是有这样的子类
多重继承,只是为了扩展不同的实现,比如有任务,上传继承自任务,备份任务继承自上传任务,相册备份和文件备份继承自备份任务,那个代码层次很深代码阅读起来很麻烦,不容易维护。
没法修改父类的行为,其实也是可以的,只不过写起来好麻烦各种函数封装,然后重写,比如父类的a->b->c的业务,在你这里要成为a->c->b了