以下是我对Java中封装概念的一点理解,不一定正确希望大家多指正。
封装就是将客户端不应看到的信息包裹起来。使内部执行对外部来看不一种不透明的、是一个黑箱,客户端不需要内部资源就能达到他的目的。下面让我们从不同角度对封装加以分析。
以最终客户的角度来看,.jar文件就是一种封装,他们不需要知道.jar文件中有多少个.class文件,每个文件中的功能与作用,同样可以得到他们希望的结果。除jar以外对于J2EE来说还有war和ear。区别见下图:
下面主要以程序员的角度分析:
从几个关键字说起:
1、 package和import允许我们做的事情是分割单个全局命名空间,保证我们不会遇到名字的冲突 。由此可Java将每个class文件封装在不同的命名空间中,使外世的类与该类和与该类有关的类分隔开来。
2、 private(私有):修饰的属性或方法只能被该类自身所访问和修改,而不能被任何其他类(包括该类的子类)来获得和引用。它提供了最高的保护级别。
3、 friendly(友好):不指定访问指示符即没有关键字描述,是缺省的,缺省的元素拥有包访问权限。由于一个编译单元只能从属于单个包,所以单个编译单元内的所有类相互间是自动“友好”的。
4、 protected(受保护):用protected修饰的成员可以被三种类所引用:1)该类自身、2)与它在同一个包中的其他类、3)在其他包中的该类的子类。
5、 public(公共):它具有被所有包中的类访问的可能性,只要这些其他包中的类在程序中使用import关键字引用该类。用public修饰会造成安全性和数据封装性下降。
由此可见访问控制符为隐藏实施细节提供了一种方式,使代码级的对类、方法、属性的封装成为可能。用包控制符和访问控制符只是封装的手段,由此方式可以抽象出四种形式。那就是类的封装、对象的封装、方法的封装和属性的封装