Effective Java笔记——第4章类和接口
来源:互联网 发布:卫生间垃圾桶 知乎 编辑:程序博客网 时间:2024/06/15 04:51
第13条:使类和成员的可访问性最小化
好处:降低系统模块之间(包之间、类之间)的耦合,使得模块可以独立测试开发,提高可重用性和易维护性
终极目标:尽可能的使每个类或者类的成员不被外接访问。
保护级别和公有的都是类导出的API的一部分,必须永远得到支持,应尽量少用。
注意:第14条:在公有类中使用访问方法而非公有域
第15条:使可变性最小化
第16条:符合优先于继承
这里说的继承是指实现继承(一个类扩展另一个类),而不是接口继承
对于包内部的继承或者继承专门为了继承而设计并且有很好的文档的类,是安全的。
不推荐的是:跨越包的界限继承普通类,除非你确认子类确实是超类的子类型
跨包继承可能存在的风险可能有:
1、继承打破了封装性,子类的实现依赖于超类中特定功能的实现细节,但是超类可能在后续版本中获得更新,子类所要求的特定细节就无法保证
2、超类可能添加新的方法,而使得子类的某些实现依赖的特定条件被打破
3、超类中可能添加一个与子类中签名相同但返回值不同的方法,从而使得子类不可通过编译
复合:不扩展现有类,而是在新的类中增加一个引用现有类实例的引用。新类的每个实例都可以调用被包含的现有类实例中对应的方法,并返回它的结果,这样的方式叫做“转发”,新的类也叫做“包装类”,除了编码稍有点琐碎,包装类在性能与内存占用上都不会带来很大的影响,但是安全性有了很大提高。第17条:要么为继承而设计,并提供文档说明,要么就禁止继承
好的API文档应该描述一个方法做了什么,而不是描述它是如何做到的。
编写为继承而设计的类,有如下建议:
1、编写子类进行测试,一般3个子类就足以测试
2、构造器决不能调用可被覆盖的方法,无论是间接还是直接调用:因为超类的构造器先于子类的构造器运行,如 果在超类的构造器中调用了可覆盖的方法,那么子类中的覆盖方法就会在子类构造器被调用之前被超类构造器提前调用,如若该覆盖方法的执行依赖于子类构造器的某些初始化条件,则难以预期执行。
3、最好不要实现Cloneable和Serializable接口,因为会把一些实质性的负担转嫁给扩展这个类的程序员,若需如此:由于clone与readObject方法与构造器方法类似,所以他们都不可直接或间接调用可覆盖的方法;如果有readResolve或者writeReplace方法,那应该使他们成为受保护的方法,以避免被扩展该类的程序员忽略。
第18条:接口优于抽象类
第19条:接口只用于定义类型
导出常量的几种正确做法:
1、如若常量与类或接口密切相关,就把常量写入该类或接口
2、使用枚举类型
3、使用不可实例化的工具类(Utility)
第20条:类层次优于标签类
标签类:即一些使用比如type域来区别某个实力的类型。比如使用使用一个标签来区分形状类的实例是圆形还是矩形
坏处:
1、代码可读性变差:会有很多样板代码,即在类中对不同的type会有不同的代码、type的判断以及枚举等。
2、增加内存占用:比如矩形实例中也会保存圆形type的东西。
3、不能定义final域:比如在矩形中,长宽域理应在final的,即应该在构造函数中初始化。但是在圆形中这两个域却又是无用的,但因为它是final又必须初始化,这样就需要借助对type的判断来分别初始化。
4、构造器不能借助编译器来设置标签域并初始化正确的域:无论你的type是矩形还是圆形,对于编译器来说都是属于同一类的实例,编译器才不知道你的type是啥呢
5、无法增加type:除非能修改源码,且增加type必须在判断type的所有地方都做相应修改
使用类层次来代替标签类:
1、把依赖type值的方法写成abstract方法放到抽象类中。
2、所有type类型都有的数据域放到上述抽象类中。
3、不依赖于type标签值的方法,则在上述抽象类中实现。
总之:标签类很少有适用的场合
第21条:用函数对象表示策略
第22条:优先考虑静态成员类
- Effective Java笔记——第4章类和接口
- Effective Java读书笔记(第4章-类和接口)
- Effective Java 第4章 类和接口
- 《Effective Java》第4章 类和接口
- effective java 类和接口笔记
- Effective Java读书笔记——第四章 类和接口
- [Effective Java]第四章 类和接口
- {Effective Java} Chap 4 类和接口
- Effective Java——类和接口(上)
- Effective Java——类和接口(下)
- effective java(类和接口)
- Effective Java:类和接口
- effective java-类和接口
- Effective Java: 类和接口
- effective java 第2章 创建和销毁对象笔记
- Effective Java读书笔记(4 类和接口)
- Effective-Java-Note-类和接口
- Effective Java 系列-02 类和接口
- 前端开发资源汇总
- C语言模拟简单的计算器
- PHP-Socket服务端客户端发送接收通信实例详解
- 【入门篇】logstash、elasticsearch、kibana搭建日志平台
- 简化你的 java map 操作:Guava 之 Multimap 用法简介
- Effective Java笔记——第4章类和接口
- android view 生命周期
- PC-1500收集整理记
- 判断方法有没有实现和判断能不能调用某个方法
- SQL数据计数(count)
- could not create bundle folder at XXX
- ZooKeeper学习总结 第一篇:ZooKeeper快速入门
- qt下的时钟程序[0806]
- UE4使用第三方库读写xml文件