求助!在线等--一个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是不是真的有“特殊待遇”吧