java clone问题 java里面假如要克隆某个对象,那么就要去实现Object的clone()方法,和去实现接口Cloneable,请问一下,为什么要去实现clone,方法呢??希望简单,易理解 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Cloneable是一个interface,里面定义了clone()方法,但是未实现它,所以希望你自己去实现。如何实现呢? 如下:public Animals Clone(){ Animals obj = new Animals(); return obj;} 之所以实现一个标准的接口,就是为了让其他使用你的类的时候可以很方便的调用clone(),如果你非得用其他的名字实现clone,没有问题,不过你得逐个通知所有可能使用这个类的人了,因为他们是实现一个标准的通用的接口 2楼错了吧.Cloneable是一个空的接口,3楼的是意思,不怎么明白,能详细点吗... 不好意思,我写错了,我想问的是为什么建议我们去重写Object的clone方法呢,不重写好象也没影响啊,而且为什么要去实现Cloneable这个空接口呢??迷茫..... 首先,Cloneable 这个接口仅做标识用,用于告诉调用者,“这个 class 是 cloneable 的”。不过,如果你的 class 仅仅实现了这个接口,那是不够的。根据 JDK 文档,实现这个接口的同时,还要重写 clone() 方法。直接的理由很简单,如果不重写的话,Object.clone() 是 protected 的,不能被外部调用,重写时要改成 public 才可以。至于“为什么要这样设计”,我想,可能是因为,实际使用 clone() 的场合大多数都需要的是“deep copy”,而 Object.clone() 实现的只是一个 field-to-field 的“shallow copy”,所以,要自己实现 clone() 方法对 Object reference 型的成员再进行 clone()。再进一步,至于为什么 Object.clone() 不直接实现成“deep copy”,我想,可能是因为那样就太过分了,实际使用时并不一定都是完全的 deep copy,也许有些成员只要 shallow copy 就够了。所以,还是把具体实现的方法交给程序员决定。 “首先,Cloneable 这个接口仅做标识用,用于告诉调用者,“这个 class 是 cloneable 的”。 ”理论上讲,我不去实现Cloneable ,仅仅去改写clone方法,逻辑上是也说得过去的。 而且实际上也行得通,所以,5楼说“Cloneable 这个接口仅做标识用”是很准确的。它只是告诉读程序的人,这个类改写了继承自Object的clone方法,实现了深拷贝。 再问一下,Object并没有给clone()这个方法进行任何操作,他的克隆是怎么形成的呢???Object里的clone()的方法: protected native Object clone() throws CloneNotSupportedException; Object的clone方法实际上是有定义的,就是把原本对象的成员变量的值赋给副本对象对应的成员变量。 曾经搞swing开发(实现copy,undo,redo,paste功能)时碰到过clone问题(deep copy),深受其害。在这里看到这样的帖子,顶下先。 但是,Object类本身不能使用clone方法复制,那样会抛出异常。任何一个类,如果想使用从Object继承过来的clone方法,就必须首先改写它;从Object直接继承过来的clone方法不能使用。 大家帮忙调试一下我做的小程序(服务器向客户端发送文件) Java传参的问题 请教怎么获得 容器或组件 区域外的鼠标事件? 课程信息表和成绩表 JAVA面试题解惑系列(五)——传了值还是传了引用? 如何访问不同包的类成员方法 如何使用API? print("//".matches("//"));我在Eclipse3.2中运行是true,但是在北京尚学堂马士兵的视频课程中,说是false,为什么? 我init()方法中提取初始值为何总是为空? 学的时候,突然觉得有点迷糊,关于import 和extends java编译时候出现的一个小小问题?请高手告诉我答案吧 正则的2个问题,请教.
如何实现呢? 如下:
public Animals Clone()
{
Animals obj = new Animals();
return obj;
}
如果你非得用其他的名字实现clone,没有问题,不过你得逐个通知所有可能使用这个类的人了,因为他们是实现一个标准的通用的接口
Object里的clone()的方法: protected native Object clone() throws CloneNotSupportedException;
在这里看到这样的帖子,顶下先。