在《java 编程思想》里面有这样一句话:将类设为final可禁止克隆的发生。由于Singleton是从Object直接继承的,所以clone()方法会保持protected(受保护)属性,不能够使用它(强行使用会造成编译时错误)。
    为什么在Singleton里面clone()方法保持了Object类的protected属性之后,这个类就不能使用clone()方法,从而做到禁止克隆了呢?
    一直没有想明白怎么回事?

解决方案 »

  1.   

    只有继承Cloneable接口clone才是有效地
      

  2.   

    您可以看下clone()这个方法都是在那个类里面的方法。
    您说的那个类里面好像没有clone()这个方法
      

  3.   

    我是想问为什么class 前面加了final之后就能不能使用clone方法,而不加就可以使用呢?希望高手能帮我解惑,解释详细点,谢谢了!!
      

  4.   

    "将类设为final可禁止克隆的发生"...
    从没听说过,估计是说一个non-cloneable的类,final以后可以禁止克隆吧?估计中文翻译有问题??也许是上下文不全...
    我猜原意也许是:一个类本身由于只是继承了Object的protected的clone,所以是non-cloneable的,如果你不把它设为final,该类使用者有可能,继承该类并implement Cloneable...总之一个cloneable的final类,当然肯定是可以clone的。
    lz可以自己试一下 像public final class DemoClass implements Cloneable 的类肯定是可以clone的,当然你得重载一个public的clone.
      

  5.   

    to:kinzz()   有道理!我想也应该是这个意思了,不然讲不通的阿,谢谢了!