zoukankan      html  css  js  c++  java
  • 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;
        }
        
    }
  • 相关阅读:
    DDoS deflate
    stm32串口
    王立平--GUI与GUILayout的差别
    DOM模型
    Android设计模式(十二)--抽象工厂模式
    Dynamics CRM 开启EmailRouter日志记录
    python in操作引发 TypeError
    为OLED屏添加GUI支持2:2D图形库
    Bloxorz I (poj 3322 水bfs)
    URAL 1823. Ideal Gas(数学啊 )
  • 原文地址:https://www.cnblogs.com/lxh520/p/8254177.html
Copyright © 2011-2022 走看看