• 首页
  • 小学语文
  • 中学语文
  • 中学英语
  • 免费论文
  • 教学随笔
  • 学生作文
  • 综合考试
  • 试题教案
  • 育儿话题
  • 教学资源
  • 编程技术
  • 博客
  • 深入浅出Java clone技术(2)

    日期:2003-03-28  地址:  作者:

     

    在上一篇中,介绍了javaclone的基本知识。本篇将着重描述如何实现clone

     

    l clone的实现

    1.实现Cloneable接口

    通过上一篇的介绍,我们知道,一个类若要具备clone功能,就必须实现Cloneable接口。做到这一步,clone功能已经基本实现了。Clone功能对我们来说,最主要的还是要能够使用它。那么我们如何才能使用clone功能呢?答案是覆盖Object#clone()方法。

    2. 覆盖Object#clone()方法

    为什么需要覆盖Object#clone()方法?这里得再次从jdk源码说起。JDKObject# clone()方法的原型是:

    protected native Object clone() throws CloneNotSupportedException;

    是否注意到,这里clone()方法修饰符是protected,而不是public。这种访问的不可见性使得我们对Object#clone()方法不可见。相信读者已明白为什么要覆盖Object#clone()方法。而且,覆盖的方法的修饰符必须是public,如果还保留为protected,覆盖将变得没有实际意义。下面举一个具有clone功能的简单的例子:

    /*

         * 具有clone功能的类的例子

    */

    public class CloneableObjExample implements Cloneable {

    //……部分代码已省略……

          private String name = null;

    private int score = 0;

     

       /**

    * NOTE: protected 修饰符 更改为 public

    * @see java.lang.Object#clone()

     */

     public/*protected*/ Object clone() throws CloneNotSupportedException {

        // call父类的clone方法

        Object result = super.clone();

         //TODO: 定制clone数据

        return result;

    }

    }

    3.定制clone

    至此,clone已经真相大白。Clone的对象我们可以对其进行定制。还就上面的例子来说。下面的方法对功能做了一定的增强:

    public/*protected*/ Object clone() throws CloneNotSupportedException {

      // call父类的clone方法

      CloneableObjExample result = (CloneableObjExample)super.clone();

      //TODO: 定制clone数据

      //虽然”clone”了,但还可以做点调整

        result.name = “New Name”;

        result.score = 90;

        return result;

    }

     

    本篇介绍了如何实现clone。接下来的篇幅将就纵深cloneclone的高级特性进行分析。

    对 深入浅出Java clone技术(2) 文章的评论    [查看网友评论]

    验证码:
    匿名发表: