Java 关于接口可克隆性

Java 关于接口可克隆性,java,Java,例如,我们编写类XXX来实现可克隆性,并重写类XXX中的方法clone,是否需要在方法中调用super.clone?是。如果不调用超级类实现,则它所需的任何数据都不会复制到新克隆 更新 例如,超级类可能希望将其私有变量复制到新克隆 实际执行应该是 XXX clone = super.clone(); // 'clone' now has all the data the super class wants to know. // add any details from your XXX

例如,我们编写类XXX来实现可克隆性,并重写类XXX中的方法clone,是否需要在方法中调用super.clone?

是。如果不调用超级类实现,则它所需的任何数据都不会复制到新克隆

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

实际执行应该是

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;

对。如果不调用超级类实现,则它所需的任何数据都不会复制到新克隆

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

实际执行应该是

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;
*编辑 好吧,我错了 下面是super.clone()调用的内容:

您应该调用super.clone()

*edit 好吧,我错了 下面是super.clone()调用的内容:


如果我们重写类XXX中的方法clone,则应该调用super.clone()

-不需要调用super。你想干什么就干什么表示复制您希望复制的内容和方式。

如果
我们重写类XXX中的方法clone
-不需要调用super。你想干什么就干什么意思是复制您希望复制的内容和方式。

一些重要的提示

  • Cloneable是一个标记接口。标记接口未声明方法或变量。他们只是告诉JVM这个类有能力做一些事情,例如可克隆、可序列化等
  • 当你说super.clone时,你不是在从cloneable调用一个方法,你实际上是在调用super类的clone()方法或者默认的Object.clone() 如果您不想要自己的实现,可以使用对象的克隆方法,但这将为您提供对象的浅拷贝。如果您想做更多的事情,最好给出自己的实现


    关于您最初的问题,不,如果您知道您的代码正在处理所有事情,那么调用超级方法并不是一种强迫。但如果需要使用超类(在本例中为对象类)的功能,则应调用超方法,调用几个重要的指针

  • Cloneable是一个标记接口。标记接口未声明方法或变量。他们只是告诉JVM这个类有能力做一些事情,例如可克隆、可序列化等
  • 当你说super.clone时,你不是在从cloneable调用一个方法,你实际上是在调用super类的clone()方法或者默认的Object.clone() 如果您不想要自己的实现,可以使用对象的克隆方法,但这将为您提供对象的浅拷贝。如果您想做更多的事情,最好给出自己的实现


    关于您最初的问题,不,如果您知道您的代码正在处理所有事情,那么调用超级方法并不是一种强迫。但是,如果您需要使用来自超类(在本例中为对象类)的功能,您应该调用超方法

    Java1.4已经有十多年的历史了。请考虑链接java的一个更新近版本的JavaDoc。(到目前为止,我已经问了自己一段时间了,为什么谷歌在执行搜索时似乎非常喜欢javadocs for Java 1.4.2。)@Buhb答案是,谷歌不仅会寻找关于你搜索的更新信息,还会将“旧的和好的”结果放在更高的排名中。这在很多事情上都有意义(比如烹饪网站),但并非总是如此……:)@你说得对,真烦人。那些javadoc已经严重过时了,大多数人都忽略了这样一个事实:它们登录到了一个非常旧的页面。为了避免这种情况,我总是搜索这样的类:
    JavaSE7 integer
    。这样,我就得到了Java7的javadoc。我这样做了这么长时间,这已经成为一种反射,我自动地这样做:)@SoboLAN:是的,这就是方法。Java1.4现在已经有十多年的历史了。请考虑链接java的一个更新近版本的JavaDoc。(到目前为止,我已经问了自己一段时间了,为什么谷歌在执行搜索时似乎非常喜欢javadocs for Java 1.4.2。)@Buhb答案是,谷歌不仅会寻找关于你搜索的更新信息,还会将“旧的和好的”结果放在更高的排名中。这在很多事情上都有意义(比如烹饪网站),但并非总是如此……:)@你说得对,真烦人。那些javadoc已经严重过时了,大多数人都忽略了这样一个事实:它们登录到了一个非常旧的页面。为了避免这种情况,我总是搜索这样的类:
    JavaSE7 integer
    。这样,我就得到了Java7的javadoc。我这样做了这么久,这已经成为一种反射,我会自动这么做:)。@SoboLAN:是的,就是这样做的。如果我第一次调用XXX的构造,这有什么关系还是有什么不良影响?使用
    super.clone()的返回值。否则,您将有可能丢失超级类所需的任何数据。如果超级类os
    对象
    ,则不会丢失,但最好使用
    super.clone()
    。如果我第一次调用XXX的构造,这是否重要或有任何不良影响?使用
    super.clone()中的返回值。否则,您将有可能丢失超级类所需的任何数据。如果超级类os
    对象
    ,则不会丢失,但最好使用
    super.clone()