1.复用代码---远远是不够的---使用类而不破坏现有程序代码(不改变原类,也不需要添加新类)
组合:将原类对象的引用置于新类中(新类中字段为原类对象的引用)
继承:新类继承原类
2.代理---新类中添加原类对象的引用,并把原类对象的方法也拿过来
组合和继承的中庸之道
将一个成员对象置于所要构造的新类中(就像组合),同时在新类中暴露该成员对象的所有方法(就像继承)
不仅用类似组合的方式把你拿过来,而且用类似继承的方式把你的方法也拿过来
3.结合使用组合和继承
清晰的分离和组织代码
使用时至多导入一个包,无须再写重复性代码
4.在组合和继承之间优先选用组合,尽可能避免使用继承,组合更具灵活性
继承---is-a 例如:动物和狗
组合---has-a 例如:代理中,新类通过组合方法添加原类对象的引用,并把原类对象的方法也拿过来
5.final
数据---不可变
方法---不可被覆盖
类---不可被继承