实现 clone 方法时,为什么不能用 Object.clone() 而用 super.clone() ,super 不就是 Object 吗?
谢谢。

解决方案 »

  1.   

    Object类对象是无法被clone的,至少当引用obj被声明为Object类的时候,你不能这么做... 因为Java中并不是所有的类都可以被克隆(而且JDK中还描述说不能保证某些类clone的结果x.clone()!=x绝对成立),所以Object类对象无法调用clone()... 还有super不是指Object而是指其父类的引用
      

  2.   

      
      java中  Object 类本身不实现接口 Cloneable,所以在类为 Object 的对象上调用 clone 方法将会导致在运行时抛出异常。 
      

  3.   

    super 不是指 Object ?
    那么 当一个类没有 extends 其它类时,是否就隐含的 extends Object 呢?
      

  4.   

    由于clone是object类的一个protected方法,代码中不能直接调用它
    子类只能受保护的clone方法克隆他自己,为此必须重新定义clone方法,
    并将其设为public,一般情况下,建议实现cloneable标记接口,并通过调用super.clone()方法
      

  5.   

    是不是 super 是指 Object ? 
    那么 当一个类没有 extends 其它类时,是否就隐含的 extends Object 呢?
      

  6.   

    你说的super是Object的一个实例
      

  7.   

    public Employee clone() throws CloneNotSupportedException{
    //call Object.clone()
    Employee cloned=(Employee)super.clone(); //clone mutable fields
    cloned.hireDay=(Date)hireDay.clone(); return cloned;
    }
    这儿为什么是 super.clone() 而不是this.clone()?这儿不应该是employee 的克隆吗?
      

  8.   

    显然没理解6楼的意思,this.clone() this继承Object
      

  9.   

    我很想知道:发表于:2008-03-26 13:17:076楼 得分:0 
    由于clone是object类的一个protected方法,代码中不能直接调用它。 上面意思是 
     Object o = new Object();
     o.clone();//这里不能引用是因为,方法是 protected。那我下面的程序为啥可以运行呢? 
     
    public class Test {
    public static void main(String[] args) {
    A a1 = new A(); 
    a1.testP();//引用自己类的protected方法
    }
    }
    class A{
    protected void testP(){
    System.out.println("=============");

    }