第13条 最小化类和成员的可访问性
降低类和成员的可访问性就是进行信息隐藏或者叫做封装,这可以保证模块之间持有对方最少的信息,降低模块之间的耦合度,使得模块可以独立的开发、测试、优化。这一点也符合面向对象设计原则中的最少知识原则。在实际开发过程中,尽可能使用最小的访问级别可以很好的做到信息隐藏。
类的访问级别按访问性由高到底分别为:
公开(public):可以被任何包中的任何类访问
包级私有:能被该类所在包的任何类访问
类私有:只能被外围类访问,访问性最低。
如果一个类是公开的,这个类就是包的API,则必须永远的支持它。所以类能不公开就不要公开。
对于成员(域,方法,嵌套类,嵌套接口)有四种可能的访问级别:private,default,protected和public。非final域或者是指向可变对象的fianl域不能公开,因为一旦公开客户类可以轻松的改变这个类的状态。对于常量或者指向不可变对象的静态final域可以公开。
在开发过程中,一个类需要访问另一个类的成员时,不能图方便直接降低该成员的访问级别,而要认真设计,不能破坏对象的封装性。
第14条 在公有类中使用访问方法而非公用域
使用访问方法代替公用域的一个好处是可以方便的对类的内部数据进行转换,算是对转换形式的可变性的封装。例如:一个类有个long类型的time域,表示以秒为单位的时间。如果需求改变,客户要求时间以分为单位的话。直接使用公有域的情况,需要在每处使用time域的地方进行转换。而用访问方法只需要在该方法内修改一处return time/60;即可。保留了将来改变该类的内部表示法的灵活性。
如果域是不可变的,可以对其进行公开,这样做的危害性会小一些。基本数据类型的final域或者指向不可变对象的final域可以公开。