一、原理:
继承:is-a关系,面向对象四大特征之一
组合:has-a关系,创建引用对象使用
二、优点:
继承:无需创建类对象直接使用;可重写父类
组合:和引用类低耦合;可动态组合多个类;
三、缺点:
继承:破坏单一原则,父类细节暴露给子类;破坏接口隔离原则,父类修改实现,子类需要修改;子类依赖父类耦合度高;不支持动态扩展(编译期定型)
组合:创建对象需要创建引用对象
四、选择探讨:
1、实现继承:Child child= new Child(); 使用时,面对子类使用,这种情况非强依赖父类,不推荐使用继承,可采用组合编程。设计模式:装饰者模式(decorator pattern)、策略模式(strategy pattern)、组合模式(composite pattern)
2、接口继承:Parent parent = new Child();使用时,面对父类使用,这种定义类的统一结构,例如模版模式(template pattern还是建议采用继承
在实际的项目设计中,根据具体情况,来选择封装和组合。结构稳定、层次较浅、关系不复杂还是建议采用继承,反正建议组合。具体场景具体应用