当你使用关键字 public,就意味着 public 之后紧跟着的成员声明对每个人都是可用的,
尤其是使用程序库的客户端程序员更是如此。假设你定义了一个包含下面编译单元的
dessert 包:
//: c05:dessert:Cookie.java
// Creates a library.
package c05.dessert;
public class Cookie {
public Cookie() {
System.out.println("Cookie constructor");
}
void bite() { System.out.println("bite"); }
} ///:~
记住,Cookie.java 产生的类文件必须位于名为 dessert 的子目录之中,该子目录在 c05
(参阅本书第 5 章)之下,而 c05 则必须位于 CLASSPATH 指定的众多路径的其中之一
的底下。不要错误地认为 java 总是将当前目录视作是查找行为的起点之一。如果你的
CLASSPATH 之中缺少一个‘.’作为路径之一的话,java 就不会查找那里。
现在如果你创建了一个使用 Cookie 的程序:
//: c05:Dinner.java
// Uses the library.
import com.bruceeckel.simpletest.*;
import c05.dessert.*;
public class Dinner {
static Test monitor = new Test();
public Dinner() {
System.out.println("Dinner constructor");
}
public static void main(String[] args) {
Cookie x = new Cookie();
//! x.bite(); // Can't access
monitor.expect(new String[] {
"Cookie constructor"
});
}
} ///:~
你就可以创建一个 Cookie 对象,因为 Cookie 的构造器是 public 而其自身也是 public
的。(此后我们将会对 public 类的概念了解更多。)但是,由于 bite( )只向在 dessert
包中的类提供访问权,所以 bite( ) 成员在 Dinner.java 之中是无法访问的,为此编译
尤其是使用程序库的客户端程序员更是如此。假设你定义了一个包含下面编译单元的
dessert 包:
//: c05:dessert:Cookie.java
// Creates a library.
package c05.dessert;
public class Cookie {
public Cookie() {
System.out.println("Cookie constructor");
}
void bite() { System.out.println("bite"); }
} ///:~
记住,Cookie.java 产生的类文件必须位于名为 dessert 的子目录之中,该子目录在 c05
(参阅本书第 5 章)之下,而 c05 则必须位于 CLASSPATH 指定的众多路径的其中之一
的底下。不要错误地认为 java 总是将当前目录视作是查找行为的起点之一。如果你的
CLASSPATH 之中缺少一个‘.’作为路径之一的话,java 就不会查找那里。
现在如果你创建了一个使用 Cookie 的程序:
//: c05:Dinner.java
// Uses the library.
import com.bruceeckel.simpletest.*;
import c05.dessert.*;
public class Dinner {
static Test monitor = new Test();
public Dinner() {
System.out.println("Dinner constructor");
}
public static void main(String[] args) {
Cookie x = new Cookie();
//! x.bite(); // Can't access
monitor.expect(new String[] {
"Cookie constructor"
});
}
} ///:~
你就可以创建一个 Cookie 对象,因为 Cookie 的构造器是 public 而其自身也是 public
的。(此后我们将会对 public 类的概念了解更多。)但是,由于 bite( )只向在 dessert
包中的类提供访问权,所以 bite( ) 成员在 Dinner.java 之中是无法访问的,为此编译
器也禁止你使用它。