本人最近再看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类

解决方案 »

  1.   

    不可能!!!ChocolateChip2是集成与Cookie的,那么肯定会集成bite的方法,因为该方法是声明为protected的,
      

  2.   

    这是不可能出现的。你的第二个类继承第一个类,就已经继承了他的protected方法了
      

  3.   

    Cookie2.java在access\cookie2目录下,ChocolateChip2.java在access目录下
      

  4.   

    这个就不用怀疑了,确实会报错的。如果把import cookie2.*改成import cookie2.Cookie就可以通过
      

  5.   

    Cookie2.java在access\cookie2目录下,ChocolateChip2.java在access目录下这种目录下
    package cookie2;引入肯定会有问题,应该为import cookie2.*改成import cookie2.Cookie。
    如果Cookie2.java在access\cookie2目录下,而ChocolateChip2.java在access\..目录下,或者ChocolateChip2.java在不在access目录或子目录下都不会出现问题。