前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EJ系列16-18条

EJ系列16-18条

作者头像
程序亦非猿
发布2019-08-16 14:32:34
2840
发布2019-08-16 14:32:34
举报
文章被收录于专栏:程序亦非猿

最近更新的文章都是Java的 Android的比较少,阅读量也不多,感觉是看EffectiveJava的人比较少?还是我写得太烂了?- -。 如果你有什么建议或想法可以留言提哈!~ 上一篇13-15条 EffectiveJava这本书写得很不错的,有机会一定要去看看!

第16条 复合优先于继承

在读HeadFirstDesignPattern的时候已经看到太多次了

这里的继承是指 实现继承(implementation inheritance)也即extends 而不是接口继承 复合(composition)也应该是常听到的组合

继承打破了封装性 子类依赖于超类中特定功能的实现细节 当超类发生改变,子类可能会遭到破坏

比如随着版本的发布,超类需要新增方法,但是这些方法不是所有子类需要的,那么就破坏了子类!

复合(组合)

复合,即使用包装类(wrapper class),其实这也就是设计模式中的装饰者模式

另外值得一提的是,复合以及转发并不是委托(delegation)

装饰者模式的优缺点不多说了,可以看设计模式的笔记

小结

继承功能确实强大,但它也存在很多问题,比如违背了封装原则(是不是很矛盾?),对于两个类,它们确实有is-a的关系时候才使用继承!

所以使用继承的时候要考虑清楚

第17条 要么为继承而设计,并提供文档说明,要么就禁止继承

代码语言:javascript
复制
好的API文档应该描述一个给定的方法做了什么工作,而不是描述它是如何做到的  

如标题,恩,我可是连注释都懒得写的人,怎么会写文档。。。

第18条 接口优于抽象类

Java提供两种机制用来定义允许多个实现的类型:接口抽象类

区别

接口和抽象类的区别有很多,其中 最为明显 的区别是: 抽象类可以包含某些方法的实现,而接口不允许,即接口都是抽象方法

而另外还有一个 更重要 的区别是:为了实现由抽象类定义的类型,类必须成为抽象类的一个子类。而Java是单继承的,所以抽象类作为类型定义受到了极大的限制,而接口没有这个限制。

接口的优势

  • 现有的类可以很容易被更新,以实现新的接口 当需要增加方法的时候只需要implements具体的接口即可,非常方便,而如果通过抽象类来实现,则需要在抽象类里新增方法,而这会导致其他继承该抽象类的类也被强制加上额外的方法!
  • 接口是定义mixin(混合类型)的理想选择 mixin是指主要的类型: 类除了实现它的”基本类型”之外,还可以实现这个mixin类型(一脸懵逼!这翻译的什么玩意?) Comparable是一个mixin接口

我的理解是:一个类,利用实现多个接口可以达到混合类型的目的,而利用抽象类只能继承一个类,则不能达到混合类型的效果!

  • 接口允许我们构造非层次结构的类型框架

EJ比较有难度,如果我有什么错误,或者你有更好的理解欢迎留言指导! 如果你觉得我写得还行,那么欢迎关注~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序亦非猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 复合(组合)
  • 小结
  • 第17条 要么为继承而设计,并提供文档说明,要么就禁止继承
  • 第18条 接口优于抽象类
    • 区别
      • 接口的优势
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档