实现 Cloneable接口深度克隆对象

实现 Cloneable接口深度克隆对象

Body对象中有Head对象,Head对象中有Face对象,Face对象中有int变量和String变量。
实现Boby对象的深度克隆,看下面代码:

package com.example.dumengen;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ObjectClone {

	protected static Logger logger= LoggerFactory.getLogger(ObjectClone.class);
	
	public static class Body implements Cloneable{

		public Head head;

		public Body(Head head) {
			this.head = head;
		}

		@Override
		protected Object clone() throws CloneNotSupportedException {
			Body body = (Body) super.clone(); 
			body.head = (Head) head.clone();
			return body;
		}

	}


	public static class Head implements Cloneable{
		public Face face;

		public Head(Face face) {
			this.face = face;
		}


		@Override
		protected Object clone() throws CloneNotSupportedException {
			Head head = (Head) super.clone();
			head.face = (Face) face.clone();
			return head;
		}

	}

	public static class Face implements Cloneable{

		public String str = "克隆";
		public int a = 1;
		public Face(String str, int a) {
			String c = str+"";
			this.str = c;
			this.a = a;
		}
		@Override
		protected Object clone() throws CloneNotSupportedException {
			return super.clone();
		}

	}


	public static void main(String[] args) throws CloneNotSupportedException {
		Body body = new Body(new Head(new Face("啊",2)));
		Body body1 = (Body) body.clone();
	    logger.info("body == body1" +"     " +(body == body1));	
	    logger.info("body.head == body1.head" +"     " +(body.head == body1.head));
	    logger.info("body.head.face == body1.head.face" +"     " +(body.head.face == body1.head.face ));
	    logger.info("body.head.face.str == body1.head.face.str" +"     " +(body.head.face.str == body1.head.face.str));
	    
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小七蒙恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值