##深克隆和浅克隆
上图中浅克隆的代码如下
package com.demo9aa.demo2;
public class People {
private Dog dog;
private int age;
public People(Dog dog) {
// TODO Auto-generated constructor stub
this.dog=dog;
}
public People() {
// TODO Auto-generated constructor stub
}
public Dog getDog() {
return dog;
}
//people的属性和方法如上代码
public static void main(String[] args) {
People p=new People(new Dog());
People pp=p;
System.out.println(pp.getDog());
System.out.println(p.getDog());
//两句输出语句输出的结果是一样的。(由于没重写Dog的toString方法,默认输出的是该对象的地址信息)
}
}
上图中深克隆的代码如下
package com.demo9aa.demo2;
public class People implements Cloneable {
//此处省略people类的部分属性和方法
@Override
public Object clone() throws CloneNotSupportedException {
// 深克隆,实现Cloneable接口,重写clone方法,并且clone方法由protected扩展为public
this.dog=new Dog();
return super.clone();
}
public static void main(String[] args) throws CloneNotSupportedException {
People p=new People(new Dog());
System.out.println(p.getDog());
Object o=p.clone();
if(o instanceof People){
System.
People pp=(People)o;
System.out.println(pp.getDog());
}
}
}
###浅克隆
浅克隆解决基本数据类型问题。是ok的。
Object中的clone()方法
它提供了一个浅克隆的方法。
它是一个native方法。
深克隆
深克隆的方法是:
1. 实现Cloneable接口
(cloneable是一个标记接口,仅仅表示类设计者要进行克隆处理,若一个对象需要克隆,未实现cloneable接口,会抛出 CloneNotSupportedException)
3. 使用public访问修饰符重新定义clone方法。