这是我对克隆的理争,不知道对不对,请高手花点时间,看一下 默认克隆是将类中的基本类型的变量进行拷贝一份。(请问数组会不会拷贝呢?)而重新定意克隆方法是希望将对像进行也考贝一份 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 clone是protected的,你要克隆一个类就要实现Cloneable接口,然后在类里面重新定义clone方法。重新定义的话也有浅拷贝和深拷贝:class F implements Cloneable{ int i; public F(int a) { i=a; } public Object clone() { Object o=null; try { o=super.clone(); } catch (CloneNotSupportedException e) { // TODO: handle exception System.out.println(e); } return o; } public boolean equals(Object obj) { if(obj instanceof F) return ((F)obj).i==i; return false; }}class G implements Cloneable{ F f; public G(int a) { f=new F(a); } //深拷贝 public Object clone() { G o=null; try { o=(G)super.clone(); } catch (CloneNotSupportedException e) { // TODO: handle exception System.out.println(e); } o.f=(F)o.f.clone();//内含对象的克隆 return o; }}public class MyClone { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub F f=new F(2); F f1=(F)f.clone(); if(f==f1) System.out.println("f,f1指向同一个对象"); else System.out.println("f,f1指向不同对象"); if(f.equals(f1)) System.out.println("f,f1中内容相等"); else System.out.println("f,f1中内容不相等"); G g=new G(2); G g1=(G)g.clone(); if(g==g1) System.out.println("g,g1指向同一个对象"); else System.out.println("g,g1指向不同对象"); if(g.f==g1.f) System.out.println("g.f,g1.f中内容相等"); else System.out.println("g.f,g1.f中内容不相等"); if(g.f.equals(g1.f)) System.out.println("g.f,g1.f中内容相等"); else System.out.println("g.f,g1.f中内容不相等"); JAVA和c++一样,都是做的浅拷贝,覆盖克隆方法时必须自己实现深度拷贝的代码,想数组和对象之类的必须自己实现 缺省的 clone 属于浅层复制,当这种方式不符合需求时,就要自己写 clone() 了。 自己写clone方法吧,对象成员是不会拷贝的 请教一个有关JAVA中Vector的问题. 如何 data binding with MySQL? 关于用java语句生成静态网页并存成html格式文件的问题!急! 面对java培训材料你敢说是java专家么?(java培训材料连载之一) 哪有Eclipse教程或使用指导? 求助,applet问题。 jbuilder7LicenseGen 怎么注册? 不知到在JAVA中能否实现下列功能: PHP中的Cookie 的問題. 請大家多指點,謝謝! 小白求问,关于动态绑定的问题! 求助jfreechart 如何处理匿名重复发帖的问题
重新定义的话也有浅拷贝和深拷贝:class F implements Cloneable
{
int i;
public F(int a)
{
i=a;
} public Object clone()
{
Object o=null;
try {
o=super.clone();
} catch (CloneNotSupportedException e) {
// TODO: handle exception
System.out.println(e);
}
return o;
}
public boolean equals(Object obj)
{
if(obj instanceof F)
return ((F)obj).i==i;
return false;
}
}
class G implements Cloneable
{
F f;
public G(int a)
{
f=new F(a);
}
//深拷贝
public Object clone()
{
G o=null;
try {
o=(G)super.clone();
} catch (CloneNotSupportedException e) {
// TODO: handle exception
System.out.println(e);
}
o.f=(F)o.f.clone();//内含对象的克隆
return o;
}
}
public class MyClone { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
F f=new F(2);
F f1=(F)f.clone();
if(f==f1)
System.out.println("f,f1指向同一个对象");
else
System.out.println("f,f1指向不同对象");
if(f.equals(f1))
System.out.println("f,f1中内容相等");
else
System.out.println("f,f1中内容不相等");
G g=new G(2);
G g1=(G)g.clone();
if(g==g1)
System.out.println("g,g1指向同一个对象");
else
System.out.println("g,g1指向不同对象");
if(g.f==g1.f)
System.out.println("g.f,g1.f中内容相等");
else
System.out.println("g.f,g1.f中内容不相等");
if(g.f.equals(g1.f))
System.out.println("g.f,g1.f中内容相等");
else
System.out.println("g.f,g1.f中内容不相等");