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

转载于:https://www.cnblogs.com/knowno/p/11254239.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值