个人备忘--浅克隆与深克隆

浅复制:

package CloneMethod;

public class ShallowCopy {
public static void main(String[] args) throws CloneNotSupportedException {
	Student s=new Student("s",12);
	Teacher t=new Teacher("t",40,s);
	Teacher ct=(Teacher) t.clone();
	System.out.println(ct);
	System.out.println("-------------------------------");
//	被复制的bean的属性改变不能引起复制对象的改变
	t.setName("copy t");
	System.out.println(t);
	System.out.println(ct);
	System.out.println("-------------------------------");
//	复制后的bean的属性改变能引起复制对象的改变
	ct.setName("copy t");
	System.out.println(ct);
	System.out.println("-------------------------------");
//	对象所引用的另一个对象的属性改变(能够)改变复制对象内的引用属性的改变(浅复制与深复制的区别)
	s.setName("copy s");
	System.out.println(ct);
}
}
class Student{
	int age;
	String name;
	public Student(String name,int age)
	{
		this.age=age;
		this.name=name;
	}
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "student name:"+name+",age:"+age;
	}
}
//复制必须继承Cloneable
class Teacher implements Cloneable{
	int age;
	String name;
	Student s;
	public Teacher(String name,int age,Student s)
	{
		this.age=age;
		this.name=name;
		this.s=s;
	}
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Student getS() {
		return s;
	}

	public void setS(Student s) {
		this.s = s;
	}

	@Override
	public String toString() {
		return "teacher name:"+name+",age:"+age+"\ninclude:\n"+s;
	}

//	讲protected类型改成public类型
	@Override
	public Object clone() throws CloneNotSupportedException {
//		super.clone()只能实现浅复制
		Object obj=super.clone();
		return obj;
	}
}

运行结果:

teacher name:t,age:40
include:
student name:s,age:12
-------------------------------
teacher name:copy t,age:40
include:
student name:s,age:12
teacher name:t,age:40
include:
student name:s,age:12
-------------------------------
teacher name:copy t,age:40
include:
student name:s,age:12
-------------------------------
teacher name:copy t,age:40
include:
student name:copy s,age:12

深复制:

package CloneMethod;

public class DeepCopy {
public static void main(String[] args) throws CloneNotSupportedException {
	Student s=new Student("s",12);
	Teacher t=new Teacher("t",40,s);
	Teacher ct=(Teacher) t.clone();
	System.out.println(ct);
	System.out.println("-------------------------------");
//	被复制的bean的属性改变不能引起复制对象的改变
	t.setName("copy t");
	System.out.println(t);
	System.out.println(ct);
	System.out.println("-------------------------------");
//	复制后的bean的属性改变能引起复制对象的改变
	ct.setName("copy t");
	System.out.println(ct);
	System.out.println("-------------------------------");
//	对象所引用的另一个对象的属性改变(不能够)改变复制对象内的引用属性的改变(浅复制与深复制的区别)
	s.setName("copy s");
	System.out.println(ct);
}
}
class Student implements Cloneable{
	int age;
	String name;
	public Student(String name,int age)
	{
		this.age=age;
		this.name=name;
	}
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "student name:"+name+",age:"+age;
	}

	@Override
	public Object clone() throws CloneNotSupportedException {
		return super.clone();
	}
}
//复制必须继承Cloneable
class Teacher implements Cloneable{
	int age;
	String name;
	Student s;
	public Teacher(String name,int age,Student s)
	{
		this.age=age;
		this.name=name;
		this.s=s;
	}
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Student getS() {
		return s;
	}

	public void setS(Student s) {
		this.s = s;
	}

	@Override
	public String toString() {
		return "teacher name:"+name+",age:"+age+"\ninclude:\n"+s;
	}

//	讲protected类型改成public类型
	@Override
	public Object clone() throws CloneNotSupportedException {
//		super.clone()只能实现浅复制
		Object obj=super.clone();
//		该方法实现深复制
		Teacher t=(Teacher) obj;
		t.setS((Student)t.getS().clone());
		return obj;
	}
}

运行结果:

teacher name:t,age:40
include:
student name:s,age:12
-------------------------------
teacher name:copy t,age:40
include:
student name:s,age:12
teacher name:t,age:40
include:
student name:s,age:12
-------------------------------
teacher name:copy t,age:40
include:
student name:s,age:12
-------------------------------
teacher name:copy t,age:40
include:
student name:s,age:12


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值