java基础-克隆

1.1.1 Object克隆的方法(了解):

使用clone的方法时候,要保证我们的那个对象对应的类,实现了Cloneable的接口才行;

浅克隆:

package day010;

//① 实现 Cloneable接口

public class Boy implements Cloneable {

private Girl girl;

public Girl getGirl() {

return girl;

}

public void setGirl(Girl girl) {

this.girl = girl;

}

/**

* ②重写 Object类的clone的方法

*/

@Override

protected Object clone() throws CloneNotSupportedException {

// TODO Auto-generated method stub

return super.clone();

}

}

package day010;

public class Girl {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

测试类:

clip_image002

以上称为浅克隆,看到的结果,Boy中引用了一个Girl,当girl的某个属性修改的的时候,每个boy对象中的girl信息都是一致的;

我们的想法一定是希望修改了某个boy属性girl的name的时候,其他的boy对象的girl属性不变;

方法1: 深克隆

方法2:序列化(以后)

package day010;

//① 实现 Cloneable接口

public class Boy2 implements Cloneable {

private Girl2 girl;

public Girl2 getGirl() {

return girl;

}

public void setGirl(Girl2 girl) {

this.girl = girl;

}

/**

* ②重写 Object类的clone的方法,同时要对boy2中的那个girl进行clone

*/

@Override

protected Object clone() throws CloneNotSupportedException {

// TODO Auto-generated method stub

Boy2 boy2 = null;

boy2 = (Boy2) super.clone();

//对boy2的girl进行clone

boy2.girl = (Girl2) girl.clone();

return boy2;

}

}

Girl2:

package day010;

public class Girl2 implements Cloneable{

@Override

protected Object clone() throws CloneNotSupportedException {

// TODO Auto-generated method stub

return super.clone();

}

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

测试类:

clip_image004

posted @ 2019-07-27 11:03  saimirisciureus  阅读(118)  评论(0编辑  收藏  举报