这是我对克隆的理争,不知道对不对,请高手花点时间,看一下 默认克隆是将类中的基本类型的变量进行拷贝一份。(请问数组会不会拷贝呢?)而重新定意克隆方法是希望将对像进行也考贝一份 解决方案 » 免费领取超大流量手机卡,每月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方法吧,对象成员是不会拷贝的 本版应该有个置顶帖子“初学者必读” 关于RMI局域网连接正常公网无法连接的问题 急啊!!socket 的问题 java能开发串口通讯程序吗? 请求帮助 请教递归问题,我有一个数组,里边保存着树结构 使用JDBC访问Mysql数据库的问题。 请帮忙,我在做毕业设计 在Eclipse中怎样使用componentPaint(),多谢英雄!80分回报,12小时之内结帐 JAVA application 有什么用? 求助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中内容不相等");