6-2 对象克隆

package interfacepage;

import java.sql.Date;

public class CloneTest {

    /**
     * @author:lixh
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        CloneModel cloneModel = new CloneModel();
        CloneModel cp =  cloneModel.clone();
        cp.setDate(Date.valueOf("2017-12-12"));
        
        System.out.println(cp.getDate());
        System.out.println(cloneModel.getDate());
        

        if (cloneModel instanceof Cloneable) {
            System.out.println("true");
        }
        
        
    }
    
    /**
     * 对象克隆
     * 
     * 1.克隆方法默认的是浅拷贝
     * 
     * 深拷贝与浅拷贝:
     * 深拷贝不仅拷贝对象的实例域,而且会拷贝对象的子对象
     * 
     * 浅拷贝的子对象是共享的,如果子对象类型是不可变的,或者对象值不变,是安全的,但是往往会变,例如:Date
     * 
     * 2.实现clone()方法必须实现 Cloneable 接口,不然会抛异常CloneNotSupportedException
     * 
     * 3.clone方法是Object的方法,而且是protected,实现clone方法时需要将方法声明为public,这样任何方法都能访问。
     * 不限于子类中才可以调用clone方法,不同包也可以调用。
     * 
     * 4.Cloneable接口是标记接口,里面不含任何方法,他的唯一作用是在类查询时使用instanceof
     */

}
package interfacepage;

import java.sql.Date;

public class CloneModel  implements Cloneable{

    private String name;

    private Date date = new Date(System.currentTimeMillis());

    private CloneModelSub sub;
    
    public CloneModel() {
        super();
    }

    public CloneModel(String name, Date date) {
        super();
        this.name = name;
        this.date = date;
    }
    
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    protected CloneModel clone(){
        CloneModel cModel = null;
        try {
            cModel = (CloneModel)super.clone();
            cModel.date = (Date)date.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return cModel;
    }
    
}

 

posted @ 2018-01-09 23:34  aLa神灯  阅读(103)  评论(0编辑  收藏  举报