封装是JAVA三大特性之一,其他两个分别是多态和继承,这一篇就为大家介绍一下JAVA的封装。
一、包
java要求源程序文件名与主类的类名相同,因此若要将多个类放在一起时(保存在同一个目录中),就要保证各类名不能重复。但是在实际开发中,一个软件系统可能包含成百上千个类,如果这些文件都保存在一个目录下,类名冲突的可能性就很大。另外,在软件设计过程中,一个软件可能会包含多个模块,把所有模块放在一起也不易于管理。
为了更好的管理这些类,JAVA中引用了包(package)的概念来管理类。
1、包的概念
包是java语言提供的一种区别类名的机制,是类的组织方法。在物理存储时包就对应一个文件夹,包中还可以有包,称为等级。同一个包中的类名不允许重复,不同包中的类名可以相同,在引用某个包中的某个类时,不仅要指定类名,还要指定包名,通过“.”来表示包的层次。
2、创建包
若要建立一个包,只要以package语句作为源文件的第一条语句,指明该文件中定义的类所在的包,格式为:
package 包名1[.包名2[.包名3]...];
经过package的声明之后,则在该文件内的所有类或接口都被纳入相同的包中
3、引用包
要在当前类中引用不同包中别的类,首先必须要先将该类引用过来,否则编译出错。如果要使用别的包中的类,必须在源程序中用import语句导入所需包,格式为:
import 包名1[.包名2[.包名3]...].类名|*;
java编译器为所有程序自动的导入包java.lang,因此该包中的类在使用时无须再额外的导入。
二、访问控制权
在一个应用系统中会有一个或多个甚至很多个模块,包含成百上千个类。应用系统要完成指定的功能,那么不同的模块间需要协同工作,但是某些成员变量或方法不希望被调用者使用,这样就需要成员进行控制权的处理。java中关于访问权限控制有4个关键字进行修饰,见下表:
同一个类中 | 同一个包中 | 不同包中的子类 | 不同包中的非子类 | |
---|---|---|---|---|
private | ★ | |||
default(无修饰字) | ★ | ★ | ||
protected | ★ | ★ | ★ | |
public | ★ | ★ | ★ | ★ |
- public:任何其他类,对象只要可以看到这个类,那么他就可以存取变量的数据或使用方法。
- default:在同一个程序包中出现的类才可以直接使用它的数据和方法。如果父类中有方法或属性是friendly类型,则不同包中的子类将不能继承该方法。
- protected:同一类、同一包可以使用。不同包想要使用必须是该类的子类。
- private:不允许任何其他类存取和调用。
三、封装
在应用设计过程中,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚,弱耦合。这就是面向对象封装的特点。
封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”。封装的目的就是增前安全性和简化编程,使用者不必了解具体的细节,只要通过外部接口和某一特定的访问权限来使用类的成员。封装的大致原则如下:
- 把尽可能多的东西藏起来,对外提供简洁的接口。
- 把所有的属性隐藏起来,不让外界直接对属性进行操作,使用getXXX()和setXXX()。