要区别一个设计良好的模块与一个设计不好的模块,最重要的是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他实现细节。一个设计良好的模块会隐藏所有的实现细节,把它的API与实现清晰的隔离开来。这个概念叫做信息隐藏或者封装
信息隐藏有许多好处:它可以有效的解除一个系统中各个模块间的耦合关系,使得这些模块可以独立地开发、测试、优化、使用、理解和修改等
在java中,提供许多机制来实现实现信息的隐藏,访问控制机制就是一种,它决定了类、接口和成员的可访问性
经验表明了,应该尽可能地使每一个类或成员不被外界访问
对于java中对于成员的修饰,有以下几种:
private :只有在声明该成员的顶层类内部才可以访问这个成员
default :声明该成员的包内部的任何类都可以访问这个成员。如果没有为成员指定访问修饰符,那么默认default
protected: 该成员声明所在类的子类可以访问这个成员(内部或在同一个包下),并且,该成员声明所在的包内部的任何类 也可以访问这个成员
public : 任何地方都可以访问该成员
对于protected,看说明比较复杂,参考http://www.runoob.com/w3cnote/java-protected-keyword-detailed-explanation.html
类的修饰没有private和protected,要么public,或者默认default ,或者更进一步降低一个类的可访问性,将起定义成内部类
有一些建议:公有静态fianl域的特殊情况之外,公有类不应该包含公有域,并且确保公有静态final域所引用的对象是不可变的(小心对象数组)