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; } }
测试类:
以上称为浅克隆,看到的结果,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; } }
测试类: