对比项 | 继承 | 组合 |
---|---|---|
类型 | 白箱复用 | 黑箱复用 |
封装 | 暴露了父类实现,破坏了封装 | 可以使用依赖注入保护封装 |
动静态 | 静态,编译时就已经确定 | 动态,运行时 可以延后具体的实现类 |
总结
固定场景可以考虑使用继承,其他场景使用组合更灵活
对比项 | 继承 | 组合 |
---|---|---|
类型 | 白箱复用 | 黑箱复用 |
封装 | 暴露了父类实现,破坏了封装 | 可以使用依赖注入保护封装 |
动静态 | 静态,编译时就已经确定 | 动态,运行时 可以延后具体的实现类 |
固定场景可以考虑使用继承,其他场景使用组合更灵活