一、包: 库单元
包(package)内包含有一组类,它们被组织在一个单一的名字空间(namespace)之下。与包相关的关键字有两个:import和package。
- 当使用类库中某个包的类时,通常使用import关键字。如要用到java.util中的ArrayList类,一种方法是用其全名java.util.ArrayList来指定;
public class FullQualification {
public static void main(String[] args) {
java.util.ArrayList list = new java.util.ArrayList();
}
}
import java.util.ArrayList;
public class SingletonImport {
public static void main(String[] args) {
ArrayList list = new ArrayList();
}
}
- 如果希望将多个类组织在一个包中,通常使用package关键字,如果使用package语句,它必须是.java文件中处注释外的第一句程序代码,在文件起始处写:
package access;
表示该编译单元(.java文件)是名为access的类库的一部分。 - 作为一名类库设计人员,应该记住:package和import关键字是为了将单一的全局名字空间分割为不同的部分,使得无论多少人使用Internet以及Java编写类,不会出现名称冲突。
二、Java访问权限
Java中访问权限分为类访问权限和成员访问权限,访问修饰词有public、protected和private。如果不提供任何访问修饰词,则意味着它是“包访问权限(package access)”,有时包访问权限用修饰词friendly表示。
2.1 成员访问权限
The Java access specifiers public, protected and private are placed in front of each definition for each member in your class, whether it’s a field or a method. Each access specifier only controls the access for that particular definition.
- public: 接口访问权限,使用关键字public,表示public之后跟着的成员对于每个人都是可以访问的。
- 默认包权限(friendly):包访问权限,表示该成员对于同一个包中的类都是可以访问的。
- protected: 继承访问权限,protected处理的是继承的概念,如果新建了一个新包,并从另一个包中继承类,那么唯一可以访问的成员就是源包的public成员。如果基类的创建者希望某个特定成员对于包外的类只对其子类开放访问权限,就需要使用protected。protected也提供包访问权限。
- private:无法访问权限,除了包含该成员的类之外,其他任何类都无法访问这个成员。
2.2 类访问权限
在Java中,访问权限修饰词也可以用于确定库中哪些类对于该库的使用者是可用的。
为了控制类的访问权限,修饰词必须放在关键字class之前。如果希望某个类可以为某个客户端程序员所用,可以使用public作用于整个类的定义来达到目的。因此可以像下面这样声明:
public class Widget {
注意,对于public class有一些额外限制:
- 每个编译单元(compilation unit)即.java文件都只能有一个public类。
- public类的名称必须完全与该编译单元的文件名一样,包括大小写。所以对于Widget而言,文件的名称必须是Widget.java。
- 编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。
注意,类既不可以是private的也不可以是protected的(除内部类除外)。对于类的访问权限,仅有两个选择:包访问权限或public。