cloneable克隆接口
cloneable克隆接口
- 1. cloneable
1. cloneable
- 第一步是
class person implements Cloneable
这个就表明 person类 可以被克隆- 但是
这个克隆接口其实是什么都没有的
- 第二步就是调用 object中的 克隆方法
这个 super.clone()
首先 这是一个object中的方法,而调用clone的对象 是继承与object中的,所以要用super克隆(也就是完全克隆,如果只用this克隆,就不能克隆出默认的object父类)
- 深拷贝(代码如下)
就是完全拷贝出一个 与原来不相关的什么情况下考虑深拷贝?
如下:一个类中还有另外一个类
所以克隆的时候就会产生,类中类是相同的
如上图片所反映的就是 浅拷贝情况
对应代码就是:
return super.clone();
深拷贝情况:
Person tmp = (Person) super.clone();tmp.m = (Money) this.m.clone();return tmp;
总代码如下:
class Money implements Cloneable{public double money=19.9;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}class Person implements Cloneable{public int age=10;public Money m = new Money();@Overrideprotected Object clone() throws CloneNotSupportedException {Person tmp = (Person) super.clone();tmp.m = (Money) this.m.clone();return tmp;//return super.clone();}@Overridepublic String toString() {return "Person{" +"age=" + age +'}';}
}public class Test {public static void main(String[] args) throws CloneNotSupportedException{Person person = new Person();Person person2 = (Person)person.clone();System.out.println(person.m.money);System.out.println(person2.m.money);System.out.println("======================");person2.m.money = 99.9;System.out.println(person.m.money);System.out.println(person2.m.money);}
class Money implements Cloneable{public double money=19.9;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}class Person implements Cloneable{public int age=10;public Money m = new Money();@Overrideprotected Object clone() throws CloneNotSupportedException {Person tmp = (Person) super.clone();tmp.m = (Money) this.m.clone();return tmp;//return super.clone();}@Overridepublic String toString() {return "Person{" +"age=" + age +'}';}
}public class Test {public static void main(String[] args) throws CloneNotSupportedException{Person person = new Person();Person person2 = (Person)person.clone();System.out.println(person.m.money);System.out.println(person2.m.money);System.out.println("======================");person2.m.money = 99.9;System.out.println(person.m.money);System.out.println(person2.m.money);}
cloneable克隆接口相关推荐
- 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第五节 引用类型复制问题及用克隆接口ICloneable修复
前言 虽然在.Net Framework 中我们不必考虑内在管理和垃圾回收(GC),但是为了优化应用程序性能我们始终需要了解内存管理和垃圾回收(GC).另外,了解内存管理可以帮助我们理解在每一个程序中 ...
- public接口可以被任何一个类实现_一文带你深入Java核心技术:对象克隆+接口与回调,还有这种操作...
对象克隆 当拷贝一个变量时,原始变量与拷贝变量引用同一个对象,如图6-1所示.这就是说,改变一个变量所引用的对象将会对另一个变量产生影响. Employee original = new Employ ...
- 虚拟机克隆_了解Java中的可克隆接口
虚拟机克隆 什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程. 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容. 这就是为什么在克隆后更改原始对象的内容时,所做 ...
- java中的深度克隆浅克隆_了解Java中的可克隆接口
java中的深度克隆浅克隆 什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程. 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容. 这就是为什么在克隆后更改原始对 ...
- 了解Java中的可克隆接口
什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程. 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容. 这就是为什么在克隆后更改原始对象的内容时,所做的更改不会反 ...
- java如何实现克隆接口_java之实现clone接口的详解,克隆一个对象--对应有浅克隆和深克隆,概念结合代码深入理解...
1.首先,你要知道怎么实现克隆:实现Cloneable接口,在bean里面重写clone()方法,权限为public. 2.其次,你要大概知道什么是地址传递,什么是值传递. 3.最后,你要知道你为什么 ...
- MySQL8.0 物理克隆接口_技术实战 MySQL 8.0.17 克隆插件分享-爱可生
原标题:技术实战 MySQL 8.0.17 克隆插件分享-爱可生 背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication) ...
- MySQL8.0 物理克隆接口_实战 MySQL 8.0.17 Clone Plugin(转)
背景 很神奇,5.7.17 和 8.0.17,连续两个17小版本都让人眼前一亮.前者加入了组复制(Group Replication)功能,后者加入了克隆插件(Clone Plugin)功能.今天我们 ...
- java——集合详解
2023 1-1 day01 迭代器iterator的作用和使用 1.1 入门案例iterator.java 迭代器主要用于遍历,常用于集合 Iterator it = 集合对象.iterator() ...
最新文章
- 测试Linux网卡是否正常工作
- java 创建日程到期提醒_苹果“快捷指令”日程播报完美版
- Symfony3实现刷新登录时间
- 云原生实战派:2021 让改变发生,2022 让创新升级
- 阿里云入选 2021 Gartner APM 魔力象限,国内唯一入选云厂商
- ant接口自动化 junit_Jenkins + Ant自动运行Junit测试
- Outlook 2010 配置关联QQ邮箱
- 九宫格布局_晒图最佳九宫格,你早就该这样拍了!
- 【传智播客】Javaweb程序设计任务教程 黑马程序员 第四章 课后答案
- 北大计算机大神,北大数学大神有多强?简直叹为观止
- 双语经典:告别单身的必杀技之情话连篇
- MongoDB中的变更通知
- 微信小程序开发——websocket(socket在线测试服务器,或本地socket服务器)
- 移动硬盘做笔记本硬盘
- ssl证书在哪?如何查看ssl证书内容
- js返回浏览器的顶部
- 看厌了官方皮肤,快试试微信QQ半透明主题!不仅会动还有声音!
- qlv转换成mp4只有声音 没有图像没有画面 解决方法
- 阿里云配置域名解析(全过程)
- Mysql配置文件my.cnf配置及配置参数详解