包(package)
package的作用
关键字package和import
当编写一个JAVA源码文件时,此文件通常被称为编译单元。每个编译单元都必须有一个后缀名.java。
而在编译单元中可以有一个public类,该类的名称必须和文件的名称相同。文件中允许有其他类,但是不能是public类。
当编译一个.java文件时,文件中的每个类都会有一个后缀为.class的输出文件,文件名和类名相同。
Java可运行程序是一组可以打包压缩为一个Java文档文件(JAR,使用Java的jar文档生成器)的.class文件。JAVA解释器负责这些文件的查找、装载和解释。
类库实际上是一组类文件。其中每个文件都有一个public类,以及任意数量的非public类。
因此每个文件都有一个构件(每一个都有它们自己独立的.java和.class文件)。如果希望这些构件从属于同一个群组,就可以使用关键字package。
如果使用package语句,必须是文件中除注释外的第一句代码。如下:
package access;
如果想要使用access包,则需要使用关键字import。如下:
import access.*;
以上内容摘自《Thinking in Java》。由以上描述可知,包的作用实际上和C++中的命名空间(namespace)十分相似。
要点
为了避免package名称的独一无二,一般的命名方法是:
(1)第一部分应该是类的创建者的反顺序的Internet域名。
(2)第二部分是把package名称分解为机器上的一个文件目录。
这样Java程序运行并加载.class文件时,就可以根据package名找到相应的路径。
eg:
package net.mindview.simple;
JAVA访问权限
JAVA中访问控制权限根据权限由大到小依次为:public > protected > 包访问权限(没有关键字) > private。
注:以下为了便于说明各访问权限,不妨做一个形象的比喻。同一个包中的类可以视为朋友关系;有继承关系的类可以视为父子关系;同一个类中的所有成员都视为自己。
作用域 | 自己(当前类) | 朋友(同一package) | 子孙(继承关系) | 其他package |
public | 可访问 | 可访问 | 可访问 | 可访问 |
protected | 可访问 | 可访问 | 可访问 | 不可访问 |
friendly | 可访问 | 可访问 | 不可访问 | 不可访问 |
private | 可访问 | 不可访问 | 不可访问 | 不可访问 |
包访问权限
JAVA默认的访问权限没有任何关键字,通常是指包访问权限(有时也表示为friendly)。
这意味着当前包中的所有其他类对包访问权限的成员都有访问权限。但是对于非本包的类,这个成员却是private。
由于一个编译单元(即.java文件)只能隶属于一个包,所以同一个编译单元中的所有类彼此可以相互访问。
自己和朋友类可以访问。
public访问权限
所有人均可以访问。
private访问权限
仅自己可以访问(除了包含该成员的类以外,任何其他类都无法访问)。
protected访问权限
自己、朋友类和子孙类可以访问。