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

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

概述

封装(encapsulation),良好的设计应该具备隐藏其内部数据和实现细节的特点,能够把它的API与它的实现清晰地隔离开,

访问控制

  1. 尽量使得每个类或者成员不被外界访问;
  • 如果类能被做成private的,它就应该被声明为private;
  • 如果一个private的类只有在某一个类的内部被用到,那就考虑使它成为唯一使用它的那个类的私有嵌套类;
  • 对于公有类的成员,当访问级别从包级私有变成protected级别后,会大大增加可访问性;
  1. 如果方法覆盖了超类中的一个方法,子类中的访问级别就不允许低于超类中的访问级别。这样可以保证任何使用超类实例的地方也都可以使用子类的实例;

  2. 实例域不能是公有的

如果域是非final的,或者指向一个可变对象的final引用。一旦域成为公有的,就会放弃了强制这个域不可变的能力。

注意长度非零的数组总是可变的,所以类具有公有的静态final数组域,或者返回这个域的访问方法都是错的。应该实现为:

1
2
3
4
5
6
7
8
9
10
private static final Thing[] PRIVATE_VALUES = {....};

// #1
public static final List<Thing> VALUES =
Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));

// #2
public static final Thing[] values() {
return PRIVATE_VALUES.clone();
}