0

比如我们写XXX类来实现Cloneable,而我们在XXX类中重写了方法clone,是不是需要在方法中调用super.clone?

4

4 回答 4

3

几个重要的指针

  1. Cloneable 是一个标记界面。标记接口没有声明方法或变量。他们只是告诉 JVM 这个类有能力做一些事情,例如可克隆、可序列化等
  2. 当您说 super.clone 时,您不是从可克隆中调用方法,实际上是在调用超类的 clone() 方法或默认情况下是 Object.clone();

如果您不想要自己的实现,可以使用 Object 的 clone 方法,但这会给您对象的浅表副本。如果你想做更多的事情,最好给出你自己的实现。

关于您最初的问题,不,如果您知道您的代码正在处理所有事情,那么调用超级方法并不是强制性的。但是如果你需要使用超类的功能(在本例中是 Object 类),你应该调用 super 方法

于 2012-08-07T05:58:14.053 回答
1

是的。如果你不调用超类实现,它需要的任何数据都不会被复制到新的克隆中。

更新 例如,超类可能希望将其私有变量复制到新克隆。

实际执行应该是

XXX clone =    super.clone();

// 'clone' now has all the data the super class wants to know.
// add any details from your XXX class to it here.

return clone;
于 2012-08-07T05:48:28.417 回答
0

*编辑好的,我错了,这是 super.clone() 调用的:

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#clone%28%29

你应该调用 super.clone()

于 2012-08-07T05:48:37.827 回答
0

如果we override the method clone in the class XXX- 不需要调用 super。你只是在那里做你想做的事。- 表示复制您喜欢复制的内容和方式。

于 2012-08-07T05:50:43.407 回答