有一个类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()方法克隆它自己,此话怎解?万分感谢。
{
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()方法克隆它自己,此话怎解?万分感谢。
clone()就是复制自身的变量和引用到一个新的对象(在堆中开辟新的空间)。这里是浅拷贝。
也可以利用这个深拷贝。另一个拷贝就是序列化。