Effective Java - 类和接口 - 复合优先于继承

读书笔记 仅供参考

继承的安全性(非接口)

继承使用不当,会导致软件变得脆弱。
在包的内部使用继承是安全的,子类和超类的受一个程序员控制。
专门为继承而设计,具有良好文档说明的类是安全的。
跨包继承就是很危险的,继承打破了封装性,简单的说,不知道一些类的内部是如何实现的,随便加功能并且依靠超类的实现就是不靠谱的。
超类还会继续演进,子类新加的方法或域可能会超类冲突

解决办法

使用复合,产生一个包装类。
包装类不适合用于回调框架,产生 SELF 问题。

例子

给 HashSet 添加计数功能,统计一共被加进来多少个对象。

错误方法

继承 HashSet 类,添加一个域进行统计,覆盖 add(), addAll() 两个方法。
出错原因:addAll() 的实现是基于 add() 方法,所以会出现重复计数。

正确方法

将 HashSet 作为一个域,产生一个包装类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值