有一个类public class Person
{
    private String name;
    private int age;
    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }
    public void setString(String name)
    {
        this.name = name;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public String getName()
    {
        return this.name;
    }
    public int getAge()
    {
        return this.age;
    }
}
public class Test
{
    public static void main(String[] args)
    {
        Person per1 = new Person("jason", 20);
        Person per2 = per1.clone();
        //为什么这个地方不能调用clone()方法呢,它不是一个protected方法,在同包中能访问吗?
    }
}
修改Person类public class Person implements Cloneable
{
    private String name;
    private int age;
    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }
    public void setString(String name)
    {
        this.name = name;
    }
    public void setAge(int age)
    {
        this.age = age;
    }
    public String getName()
    {
        return this.name;
    }
    public int getAge()
    {
        return this.age;
    }
    protected Object clone() throws CloneNotSupportedException
    {
        return super.clone();
    }
}
这样改过之后为什么就能访问了呢?
谁能详细解释下JAVA中的克隆吗?特别是只有本类才能克隆本类的对象,即子类只能直接调用受保护的clone()方法克隆它自己,此话怎解?万分感谢。

解决方案 »

  1.   

    克隆必须实现Cloneable 接口
      

  2.   

    http://blog.csdn.net/it_man/archive/2006/11/22/1404550.aspx
      

  3.   

    java的克隆有两种,一是实现Cloneable接口,二是系列化
      

  4.   

    object里面的clone()是protected类型的,只有同一个包中的类和不同包中的子类能够访问,你那里调用,对于per1 来说,它看不见clone()方法,
    clone()就是复制自身的变量和引用到一个新的对象(在堆中开辟新的空间)。这里是浅拷贝。
    也可以利用这个深拷贝。另一个拷贝就是序列化。
      

  5.   

    http://blog.csdn.net/gsen/archive/2005/09/30/492489.aspx