zoukankan      html  css  js  c++  java
  • Cloneable接口分析

    Cloneable接口是一个标记接口,也就是没有任何内容,定义如下:

    package java.lang;
        pubilc interface Cloneable
        {
        }

    这里分析一下这个接口的用法

    clone方法是在Object中定义的,而且是protected型的,只有实现了这个接口,才可以在该类的实例上调用clone方法,否则会抛出CloneNotSupportException.Object中默认的实现是一个浅拷贝,也就是表面拷贝,如果需要实现深层次拷贝的话,必须对类中可变域生成新的实例.

    pubilc class Unsupported{
        public Object clone(){
            Object obj;
            try {
                obj=super.clone();
            } catch (CloneNotSupportedException ex) {
                ex.printStackTrace(); //Exception was thrown
            }
            return obj;//返回的是null
       }
    }

    加上 implements Cloneable 就可以了.可不可以不实现这个接口,但是覆盖Clone方法.

    pubilc class Unnormal{
        public Object clone(){
            return new Unnormal();
        }
    }    

    这样肯定没有问题的,不过已经和java中的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;
        }
    }                

     

  • 相关阅读:
    Spring总结九:事务管理机制
    Spring总结七:AOP动态代理的实现
    Spring总结六:AOP(面向切面编程)
    Nginx静态网站的部署
    Spring总结五:小结 使用spring访问servlet
    javascript 的dateObj.getTime() 在为C#的获取方式
    操作JavaScript数组
    判断是否是对象的原型
    JavaScript判断对象 是什么类型的.
    Javascript中类型: undefined, number ,string ,object ,boolean
  • 原文地址:https://www.cnblogs.com/zq-inlook/p/3512394.html
Copyright © 2011-2022 走看看