protected作用范围的问题

package cn.tedu.object;

public class ObjectDemo1 implements Cloneable {

    int i;

    // 表示抛出异常
    public static void main(String[] args) throws Throwable {

        ObjectDemo1 od1 = new ObjectDemo1();
        od1.i = 10;
        ObjectDemo1 od2 = (ObjectDemo1) od1.clone();
        System.out.println(od2.i);

         A a1 = new A();
         a1.clone();

    }

}

class A implements Cloneable {
}

clone方法是protected修饰的
调用的地方是同包下的非子类 protected应该是可以访问的
为什么这里还会报编译错?

阅读 2.9k
4 个回答

因为 clone 本身是个 Object 的方法,不是 A
如果在 A 里重写一下 clone,就可以访问到了

这和clone无关。和protected作用域有关。
不同包下无法调用,a1只能调用A下个protected方法(这个方法里覆盖父类的protected方法)。不能直接调用A的父类的protected方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题