在 Java 中,封装就意味着所有的实例域都带有 private 访问修饰符(私有的实例域),并提供带有 public 访问修饰符的域访问器方法和域更改器方法(公共的操作方法)。
访问修饰符
- public:声明为 public 的内容对所有类可见。
- protected:声明为 protected 的内容对所有子类和同一个包中的所有其他类可见。
- private:声明为 private 的内容仅对本类可见。对其他类都是不可见的,这对于子类来说也完全适用,即子类也不能访问父类的私有域。
- 缺省(无访问修饰符):无访问修饰符的内容对同一个包中的所有其他类可见。
Java 中的受保护部分(protected)对所有子类及同一个包中的所有其他类都可见。这与 C++ 中的保护机制稍有不同,Java 中的 protected 概念要比 C++ 中的安全性差。
- 修饰类,只能用:public、缺省
- 修饰类的内部结构(属性、方法、构造器、内部类),可以用:public、protected、private、缺省 修饰
受访问保护
大家都知道,最好将类中的域标记为 private,而将方法标记为 public。任何声明为 private 的内容对其他类都是不可见的,这对于子类来说也完全适用,即子类也不能访问父类的私有域。
不过,Manager 类中的方法只能够访问 Manager 对象中的 hireDay 域,而不能访问其他 Employee 对象中的这个域。这种限制有助于避免滥用受保护机制,使得子类只能获得访问受保护域的权利。
受保护的方法更具有实际意义。
- 如果需要限制某个方法的使用,就可以将该方法声明为 protected。这表明子类(可能很熟悉祖先类)得到信任,可以正确地使用这个方法,而其他类则不行。这种方法的一个最好的示例就是 Object 类中的 clone 方法。
- protected 方法对于指示那些不提供一般用途而应在子类中重新定义的方法很有用。
参考资料
《Java核心技术卷一:基础知识》(第10版)第 5 章:继承 5.1.10 受保护访问