日期:2014-05-20  浏览次数:20766 次

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

------解决方案--------------------
只有继承Cloneable接口clone才是有效地
------解决方案--------------------
您可以看下clone()这个方法都是在那个类里面的方法。
您说的那个类里面好像没有clone()这个方法
------解决方案--------------------
"将类设为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.