我再学习对象克隆的时候,Object类中的clone()方法被定义为protected的,不能直接调用anObject.clone(),但是有一个问题是就是所有子类都可以访问他受保护的方法,不是每个类都是Object类的子类吗?书上的解释是子类只能调用受保护的clone()方法克隆他自己,为此必须重新定义clone()方法,并把他定义为public. 
      子类只能调用受保护的clone()方法克隆他自己,这个解释我还是听不明白,有没有更详细一点的解释啊,我都看了半天这个问题了,高手帮忙解决一个吧!!      我现在的理解是:有类A和B,应为他们都是Object类的子类,所以他们都有一个在Object类中定义的默的protected的clone()方法。所以A中B的protected方法是不可见的,B中A的protected方法是不可见的,所以A中不可以new   B().clone().在B中不可以new   A().clone();我这样理解可以吗? 
      还有他们的protected方法对于他们同一个包和他们的子类是可见的,所以如果A,B同包或者他们互相为父子类那么就可以在B中new   A().clone();或者在A中new   B().clone();了吧?
      还有如果在A中我不该写原始的clone()方法直接new A().clone();这样可以吧?
      呵呵问的问题比较多,这个问题实在是比较麻烦,都好长时间了没解决了。

解决方案 »

  1.   

    关键问题是:protected的含义是“同包子类可用”,并不是“子类可用”。所以就算任何class都是Object的子类,但Object.clone()未必对它们都可见。
    那么,如果你自己写的类A,要能够clone()的话,只能重写clone方法。如果你不打算用别的类,比如类B,来实现clone操作的话,你把A的clone方法不加public也行。
      

  2.   

    你看看定义吧,proteceted是对本包和所有子类可见。对本包和本包子类可见你不觉得后面的多余吗?