复制和克隆
来源:互联网 发布:神雕侠侣安徽卫视源码 编辑:程序博客网 时间:2024/05/23 14:01
复制:将某个对象的引用复制给另一个对象,两个对象还是指向同一个应用。克隆:分为浅复制、深复制。浅复制:将对象的数据进行复制,但是对象中包含的对象,仍旧只是复制对象的引用。深复制:不仅复制对象的基本类型属性,对于对象中包含的对象的数据也进行复制。要实现克隆,需要重写Object的访问权限protected的clone方法。既然Object是所有类的超类,为什么不能直接调用clone方法?这是由于protected受访问保护规则是很微妙的。虽然protected域对所有子类都可见。但是有一点很重要,子类只能在自己的作用范围内访问自己继承的那个父类protected,而无法到访问别的子类(同父类的亲兄弟)所继承的protected域和父类对象的protected域。所以需要在子类重写clone方法,并且访问权限设置为public,才能被其他类调用。注意:重写clone方法,所在类必须实现Cloneable标识接口,作为克隆的标识,否则会出现受检异常ClassNotSupportedException的问题。
class Person2 implements Cloneable{ private String name; private int age; private Date birthday = new Date(); public Person2(){ super(); } public Person2(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name){ this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(int year,int month,int day) { Date newDay = new GregorianCalendar(year,month-1,day).getTime(); birthday.setTime(newDay.getTime()); } public Person2 clone() throws CloneNotSupportedException{ Person2 cl = (Person2)super.clone(); cl.birthday = (Date)birthday.clone(); return cl; } public String toString(){ return name+":"+age+":"+birthday; }}public class Test { public static void main(String[] args) throws CloneNotSupportedException { Person2 p = new Person2("原始",2); p.setBirthday(2015, 2, 10); Person2 copy = p.clone(); copy.setAge(3); copy.setName("克隆"); copy.setBirthday(2016, 2, 10); System.out.println("前 "+p); System.out.println("后 "+copy); }}
浅复制和深复制的不同操作:在clone方法中,需不需要对子对象再次克隆。浅复制:基本数据类型进行了数据复制,但是子对象仍旧是复制的引用深复制:不仅基本数据类型进行了数据复制,子对象使用了克隆,进行了数据的复制,已经不再是引用的复制。
0 0
- 复制和克隆
- Java对象克隆(复制):深复制和浅复制
- C# 复制和克隆认识浅谈
- C# 复制和克隆认识浅谈
- C# 复制和克隆认识浅谈2
- 笔记17 数组的复制和克隆
- 克隆复制和表单取值
- Java的浅克隆和深克隆(浅复制和深复制)
- (2.1.9)java的clone和浅复制克隆、深复制克隆
- java clone 对象的深复制(深克隆)和浅复制(浅克隆)介绍
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- java 浅克隆(浅复制)和深克隆(深复制)
- Java中对象的深复制(深克隆)和浅复制(浅克隆)
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- 深复制(深克隆)和浅复制(浅克隆)
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍
- java基础概念
- jacascript核心语法————循环结构
- 带权二分图的最佳匹配(KM算法)
- 【java】helloword.java:1: 错误: 类HelloWorld是公共的, 应在名为 HelloWorld.java 的文件中声明
- java学习:log4j输出xml格式的日志文件(log4j2篇)
- 复制和克隆
- apache2.4的虚拟站点配置与个人情感的纠结
- javascript核心语法————数组、API
- Android 4.2 Ethernet启动流程
- 原来小清新色调是这样调出来的~
- [LeetCode] 15. 3Sum
- 开源技术浅谈
- Linux 查看服务状态
- 【PA2014】Fiolki