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

求助!在线等--一个JAVA访问权限的基础问题
初学JAVA,遇到一个protected访问权限的问题,请高人指点一下哈
我写了3个类 A1,A2,A3
分别如下:
public class A1{
  protected void f(){
  System.out.println("A1.f()");
  }
}

public class A2 extends A1{

}

public class A3 extends A1{
  public static void main(String s[]){
  A2 a2 = new A2();
  a2.f();
  }
}
执行java A3的时候,输出A1.f()

但是Object类中的一个方法好像与上边有点矛盾 就是clone()方法
我又写了2个类如下:
public class B1 implements Cloneable{

}

public class B2 implements Cloneable{
  public static void main(String s[]){
  B1 b1 = new B1();
  try{
  B1 b = b1.clone();
  }catch(Exception e){
  e.printStackTrace();
  }
  }
}
这样在编译A2的时候就已经报clone() has protected access in java.lang.Object 

这个错误
我看B1,B2,Object 这三个类的关系 与 A2,A3,A1 三个类的关系类似阿,而且f()

与clone()方法也都是protected访问权限,
那么为什么会出现这样不同的结果呢?
书上是说了, clone()方法要在各自的类中重写为public权限,这个我知道。
这个问题主要是在访问权限的角度看的,请哪位高手给我一个解释阿。。

------解决方案--------------------
刚又试了下,不只是Object,其他类也是一样的。你两个例子中不通的地方是:A1 A2 A3在同一个包中,而Object和B1 B2在不同的两个包中

------解决方案--------------------
所以喽,你的A1A2A3都在一个包里,你把A1挪到别的包里,这样才跟Object、B1、B2的情况一样,这样试试然后再说Object是不是真的有“特殊待遇”吧