代码
public class nb{
public static void main(String[] args){
Resume zs=new Resume("zs","man",25);
zs.setEexxpp("精通java");
zs.display();
Resume ls=(Resume)zs.clone();
ls.setEexxpp("精通c++");
zs.display();
ls.display();
ls.setEexxpp("啥都不精通");
zs.display();
ls.display();
}
}
class Resume implements Cloneable{
private String name;
private String sex;
private int age;
//private String exp;
private experience eexxpp;
public Resume(String name,String sex,int age){
this.name=name;
this.sex=sex;
this.age=age;
this.eexxpp=new experience();
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
/*public void setExp(String exp){
this.exp=exp;
}
public String getExp(){
return exp;
}*/
public void setEexxpp(String exp){
//eexxpp.setExp(exp); 深拷贝与浅拷贝的代码区别在这里
eexxpp=new experience();
eexxpp.setExp(exp);
}
public experience getEexxpp(){
return eexxpp;
}
public void display(){
System.out.println("姓名:"+name+" "+"性别:"+sex+" "+"年龄:"+age);
System.out.println("工作经历:"+eexxpp.xp());
}
public Object clone(){
try{
return (Resume)super.clone();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
class experience{
private String exp;
public void setExp(String exp){
this.exp=exp;
}
public String xp(){
return exp;
}
}
1.直接赋值:地址的赋值,即两个变量引用同一个对象,同步改变。
2.浅拷贝:克隆后基本类型可以独立修改,但引用类型是共用的,即引用同一个对象。
3.深拷贝:克隆后所有类型变量都是独立的。(在写set引用类型方法时引用一个新的对象即可)
网友评论