Object中的clone
protected native Object clone() throws CloneNotSupportedException;我知道:
1.自己的类要用clone则必须覆盖Object.clone(),或深拷贝,或浅拷贝
且实现Cloneable接口,以作为标记
2.protected的作用域为本包和子类请解释我不知道的:
Object中的clone为什么是protected,而不是public?
请明确解释protected在这里所起的作用

解决方案 »

  1.   

    和子类只能访问而不能继承超类protected方法有关?能详细解释下吗?
      

  2.   

    protected明确限定了只能在子类或者自身中调用
    一般来说不允许其他类的对象调用你可能要问 同一包中的其他类还是可以调用 , 那我也不能解释 java的作用域就是这样划分的
      

  3.   

    有时侯你不希望你的对象被clone,如果是public的话就不安全了
      

  4.   

    对于java.lang.Object类来说protected和public有区别吗?
    每一个都是它的子类另外一个方面 将clone设置为protected 子类重写clone时就有protected和public两种选择
    如LS所说 当你希望你的类不至于是随便一个类都能够对他进行clone时 这样就很有效
    如果是public 那你重写的clone方法就只能是public了 无选择的能被任何类使用
      

  5.   

    之所以把clone方法定义为protected,是因为若把clone方法定义为public时,失去了安全机制.这样的clone方法会被子类继承,而不管它对于子类有没有意义.比如,我们已经为Employee类定义了clone方法,而其他人可能会去克隆它的子类Manager对象.Employee克隆方法能完成这件事吗?这取决于Manager类中的字段类型.如果Manager的实例字段是基本类型,不会发生什么问题.但通常情况下,一需要检查你所扩展的任何类的clone方法.以上引自core java 第六版 209页
    可我还是不理解为什么把clone定义为protected,谁能解释吗?
      

  6.   

    protected 的问题protected方法被子类继承后,子类A如果和父类不在同一包里而且又没有复写该方法,则该方法对子类所在包的其他类的可见性变为private,如果再有子类B继承A,该方法还是可以被B继承如:
    class MyObject {}
     
    public class Test 
        public static void main(String[] args) 
           MyObject obj = new MyObject();
           obj.clone(); // Compile error.
        }
    }
      

  7.   

    这是个bug
    http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033