【发布时间】:2013-08-16 21:29:57
【问题描述】:
我知道clone() 是一个受保护的方法,但“受保护”意味着它可以被特定类的所有子类访问。
任何Java类都是Object的子类,那么这里的protected方法是什么原因呢?
为什么我们只能在实现Cloneable 接口的类上调用clone()?
我不明白它与Object 中的clone() 被声明为受保护这一事实有何关联。
【问题讨论】:
-
这是一个悲伤的故事.. :) 在 java 中的克隆不能正常工作(嗯,确实可以,但经过很多努力),所以避免它。
-
Cloneable实际上是一个非常糟糕的接口,不应该被视为一个很好的例子。老实说,它主要靠魔法起作用。 -
阅读 Josh Bloch 的 Effective Java 了解为什么 Cloneable 和 clone() 被破坏了。请改用复制构造函数或类似的解决方案。