浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制
深拷贝:对象,对象内部的引用均复制
为了更好的理解它们的区别我们假设有一个对象A,它包含有2对象对象A1和对象A2


继承自java.lang.Object类的clone()方法是浅复制
Java的clone()方法
⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足:
①对任何的对象x,都有x.clone() !=x//克隆对象与原对象不是同一个对象
②对任何的对象x,都有x.clone().getClass()= =x.getClass()//克隆对象与原对象的类型一样
③如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。
⑵Java中对象的克隆
①为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。
②在派生类中覆盖基类的clone()方法,并声明为public。Java的clone()方法
⑴clone方法将对象复制了一份并返回给调用者。一般而言,clone()方法满足:
①对任何的对象x,都有x.clone() !=x//克隆对象与原对象不是同一个对象
②对任何的对象x,都有x.clone().getClass()= =x.getClass()//克隆对象与原对象的类型一样
③如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。
//实现克隆
//继承自java.lang.Object类的clone()方法是浅复制
package java课程;
//import java.io.Serializable;
class Point
{
public int x;//方便下面使用
public int y;
public Point(int i,int j)
{
this.x = i;
this.y = j;
}
}
class Parent implements Cloneable//,Serializable
{
public Point point;
public int[] array;
public String str;
public Parent()
{
}
public Parent(Point p,int [] array,String s)
{
this.point = p;
this.array = array;
this.str = s;
}
public Object Clone() throws CloneNotSupportedException
{
Object object = null;
object = (Parent)super.clone();
return object;
}
}
public class clone {
public static void main(String [] args) throws CloneNotSupportedException
{
Point px = new Point(1,2);
int [] array = new int[]{3,4,5};
String ss = "Xiao_lu";
Parent p1 = new Parent(px,array,ss);
Parent p2 = (Parent)p1.Clone();
p2.point = new Point(10,20);
p2.array = new int[]{30,40,50};
p2.str = "Lu_xiao";
System.out.println("p1的属性:");
System.out.println(p1.point.x);
System.out.println(p1.point.y);
for(int i = 0;i<p1.array.length;i++)
{
System.out.println(p1.array[i]);
}
System.out.println(p1.str);
System.out.println("p2的属性:");
System.out.println(p2.point.x);
System.out.println(p2.point.y);
for(int i = 0;i<p2.array.length;i++)
{
System.out.println(p2.array[i]);
}
System.out.println(p2.str);
}
}
推荐阅读:
http://java.chinaitlab.com/oop/784559.html
http://coolmist.iteye.com/blog/127455