Effective Java 系列-02 类和接口
2017-02-15 22:43
176 查看
Effective Java 系列-02 类和接口
一、类和成员的可访问性最小化
对于成员有四种可能的访问级别:私有的(private) 只有再声明该成员的类内部才可以访问这个成员。
包级私有 声明改成员的包内部的任何类都可以访问这个成员。
受保护的(protected) 声明改成员的类的子类内部可以访问这个成员。
公有的(public) 任何地方都可以访问。
实例域不能是公有的。因为这个域被公开之后,就失去了对这个对象的限制,并有可能造成线程安全问题。
注意:长度非零的数组总是可变的,所以类具有公有的静态final数组域或者返回这种域的访问方法,这几乎总是错误的,如果类具有这种域或者访问访问,客户端将能够修改数组种的内容了,这是安全漏洞种的一个常见根源,修复这个问题有两种方式,一是返回数组转换的变为不可变列表,另一个是返回这个数组的克隆对象。
二、类的可变性最小
需要遵循下面五个原则:- 不要提供任何会修改对象属性的方法
- 保证类不会被扩展
- 所有的域都是final的
- 所有的域都是私有的
- 确保对于任何可变组件的互斥访问。如果类具有指向可变对象的域,必须却包该类的客户端无法获得指向这些对象的引用,并且永远不要用客户端提供的对象引用来初始化这样的域,也不要从任何访问的方法种返回该对象的引用。
三、复合优于继承
继承会打破类的封装性。继承由于超类的更新有可能会破坏现有子类的安全性。
使用复合可以解决上述问题,也称为包装模式。复合的类称为原类的包装类。
在新类种增加一个私有域,引用现有类的实例,新类种的每个实例方法都可以调用被包含的现有类实例中对应的方法,并返回它的结果。
使用包装模式,可以对现有类的进行功能上的增强。
在开发中优先考虑复合,实现对超类的方法增强。
相关文章推荐
- SAP接口编程之 NCo3.0系列(02) : RFC Client Programs
- 【黑金ZYNQ7000系列原创视频教程】02.视频接口——hdmi编码输出实验
- SAP接口编程-RFC系列02 : Connection对象
- SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming
- SAP接口编程 之 JCo3.0系列(02) : JCo Client Programming
- MyBatis源码学习系列:02-核心接口SqlSessionFactory和SqlSession
- 常用接口定义02——DB与DR系列端口
- Effective Java系列读后感(三)-类和接口
- AT24C01/02/04/08/16/32系列EEPROM驱动程序
- Smalltalk基础知识系列02:对象和消息之一切皆对象
- 王甲佳全息营销系列02-因特网的社会变革力与全息营销的产生
- Javascript乱弹设计模式系列(0) - 面向对象基础以及接口和继承类的实现
- Firefox 扩展系列 – Firefox Extension IDL 定义组件接口
- Cisco Catalyst 6500系列10/100和10/100/1000以太网接口卡
- ASP MVC 学习系列——02 Deploy到IIS 5.1
- 自动生成xls文档系列02-oracle数据库空间自动整理
- C#拾遗系列(9):继承、接口、扩展方法、分部类、类操作、Ref and Out、可空类型
- Spring.net抛砖引玉系列(二)用接口来实现HelloWorld
- java面向对象浅析系列2——抽象类、接口与多继承
- AR28/AR46系列路由器用出接口地址做Easy NAT的典型配置方法