Dev-No.02 Cloneable与Clone(深拷贝、浅拷贝)

 

共享heap中的空间

 实现clone()方法条件:

 

  • 需拷贝的类实现Cloneable接口(该接口内没有方法)、
  • 实现 public Object clone() 方法

 

    clone()为浅拷贝,若想改为深拷贝,需类中可变域生成新的实例

//浅拷贝:

public class ShallowCopy implements Cloneable{
     			private Date begin;
     			public Date getBegin(){return this.begin;}
     			public void setBegin(Date d){this.begin=d;}
     			public Object clone(){
 				Object obj=null;
        			try {
  					obj=super.clone();
 			 	}catch (CloneNotSupportedException ex) {
        				ex.printStackTrace(); 
     				}
 				return obj;
     			}
        }

 //深拷贝:

public class DeepCopy implements Cloneable{
 		private Date begin;
     		public Date getBegin(){return this.begin;}
     		public void setBegin(Date d){this.begin=d;}
     		public Object clone(){
 		DeepCopy obj=null;
 		try{
  			obj=(DeepCopy)super.clone();
  		}catch (CloneNotSupportedException ex) {
        		ex.printStackTrace(); 
    		}
 		obj.setBegin((Date)this.getBegin().clone());
 		return obj;
    		}
    }