Effective Java - 类和接口 - 复合优先于继承
2017-11-17 19:33
351 查看
读书笔记 仅供参考
在包的内部使用继承是安全的,子类和超类的受一个程序员控制。
专门为继承而设计,具有良好文档说明的类是安全的。
跨包继承就是很危险的,继承打破了封装性,简单的说,不知道一些类的内部是如何实现的,随便加功能并且依靠超类的实现就是不靠谱的。
超类还会继续演进,子类新加的方法或域可能会超类冲突
包装类不适合用于回调框架,产生 SELF 问题。
出错原因:addAll() 的实现是基于 add() 方法,所以会出现重复计数。
继承的安全性(非接口)
继承使用不当,会导致软件变得脆弱。在包的内部使用继承是安全的,子类和超类的受一个程序员控制。
专门为继承而设计,具有良好文档说明的类是安全的。
跨包继承就是很危险的,继承打破了封装性,简单的说,不知道一些类的内部是如何实现的,随便加功能并且依靠超类的实现就是不靠谱的。
超类还会继续演进,子类新加的方法或域可能会超类冲突
解决办法
使用复合,产生一个包装类。包装类不适合用于回调框架,产生 SELF 问题。
例子
给 HashSet 添加计数功能,统计一共被加进来多少个对象。错误方法
继承 HashSet 类,添加一个域进行统计,覆盖 add(), addAll() 两个方法。出错原因:addAll() 的实现是基于 add() 方法,所以会出现重复计数。
正确方法
将 HashSet 作为一个域,产生一个包装类。相关文章推荐
- Effective Java学习--第16条:复合优先于继承
- Effective Java 第16条 : 复合优先于继承
- 【Effective Java】6、使用复合优先于使用继承
- 《Effective java》读书记录-第16条-复合优先于继承
- Effective Java 16:复合优先于继承 Favor composition over inheritance
- Effective Java - 类和接口 - 要么为继承而设计,并提供文档说明,要么就禁止继承
- 第16条:复合优先于继承
- 复合优先于继承。
- Effective Java读书笔记-复合优先于继承
- 复合优先于继承
- 第十六条:复合优先于继承
- EffectiveJava(16)复合优先于继承
- 哥最喜欢的一条:复合优先继承(仅限于extends)
- 第16条:复合优先于继承
- Effective Java学习--第22条:接口优先于抽象类
- Effective Java 第三版——44. 优先使用标准的函数式接口
- Effective Java - 类和接口 - 优先考虑静态成员类
- 复合优先于继承
- 复合优先于继承
- 复合优先于继承