关于包访问权限的问题
本人最近再看Thinking in java的“访问权限控制”这一章,里面有个例子是这样的:
//Cookie.java
package cookie2;
public class Cookie {
public Cookie() {
System.out.println("Cookie constructor");
}
protected void bite() {
System.out.println("bite");
}
}
//ChocolateChip2.java
import cookie2.*;
public class ChocolateChip2 extends Cookie {
public ChocolateChip2() {
System.out.println("ChocolateChip2 constructor");
}
public void chomp() {bite(); } //报错,提示没有bite()方法
public static void main(String[] args) {
ChocolateChip2 x = new ChocolateChip2();
x.chomp();
}
}
而如果把import语句写成import cookie2.Cookie则正常。难道这两者有区别吗?
注意:ChocolateChip2.java所在包下面没有定义Cookie类
------解决方案--------------------
Cookie2.java在access\cookie2目录下,ChocolateChip2.java在access目录下这种目录下
package cookie2;引入肯定会有问题,应该为import cookie2.*改成import cookie2.Cookie。
如果Cookie2.java在access\cookie2目录下,而ChocolateChip2.java在access\..目录下,或者ChocolateChip2.java在不在access目录或子目录下都不会出现问题。