使类和成员的可访问性最小化

要区别设计良好的模块与设计不好的模块,最重要的因素在于,这个模块而言,是否隐藏内部数据和其他实现细节.设计良好的模块会隐藏所有的实现细节,把它的api和其他的实现清晰的隔离开来.然后模块之间只通过他们的api进行通信,
一个模块不需要知道其他模块的内部工作情况,这个概念被称为信息隐藏 information hiding
为什么要信息隐藏,大多数理由都因为一个事实,
有效解除系统各模块直接的耦合关系,可以独立开发,测试,优化,使用,理解,和修改.加快系统开发速度
信息隐藏也降低构建大型系统的风险,因为即使系统不可用,但是这些独立的模块却有可能是可用的
java提供了许多机制来协助信息隐藏
private –只有在声明该成员的顶层类内部才可以访问
package-private–该成员包内部的任何类都可以方法这个成员
protected–该成员的类的子类都可以访问这个成员
public –任何地方都可以访问这个成员
如何正确使用访问修饰符
尽可能的是每个类或成员不被外界访问
对于顶层的类(非嵌套的)类和接口,只有两种可能的访问级别 包级私有 package-private和公有的public
如果一个包级私有的顶层类或接口,只是在某一个类的内部被用到
就应该考虑使他成为唯一使用它的那个类的私有嵌套类.
只有当同一个包内的另一个类真正需要访问一个成员的时候,才应该删除private修饰.是该成员变成包级私有,如果需要经常做这样的事情,你应该检查下系统设计.
如果方法覆盖了超类一个方法,子类的额方法基本就不允许低于超类中的访问级别,特殊情形:如果一个类实现了一个接口,那么接口中的所有类方法在这个类中必须声明为公有的
实例域绝不能是共有的,如果域是非final的,或者是一个指向可变的对象的final引用,那么一旦使这个域成为公有的,就放弃了对存储这个域中的值进行限制的能力,意味着,你也放弃了这个域不可变的能力,包含公有可变域的类并不是线程安全的
同样的建议也适用于静态域,有一种例外情况,假设常量构成了子类提供的整个抽象找那个的一部分,可以通过公有的静态final域来暴露这些常量,按惯例这些域的名称由大写字母组成,单词之间用下划线个隔开

猜你喜欢

转载自blog.csdn.net/gameloftnet/article/details/79257811