日期:2014-05-20  浏览次数:20686 次

关于包访问权限的问题
本人最近再看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目录或子目录下都不会出现问题。