1.Object类关于自定义实现“克隆”的步骤
- 自定义类实现Cloneable接口,实现该接口的对象可以实现“自我克隆”。
- 自定义类实现自己的clone()方法。
- 实现clone()方法时通过super.clone():调用Object实现的clone()方法来得到对象的副本,并返回该副本。
2.代码示例
class Address
{
String detail;
public Address(String detail)
{
this.detail = detail;
}
}
//实现Cloneable接口
class User implements Cloneable
{
int age;
Address address;
public User(int age)
{
this.age = age;
address = new Address("西安");
}
// 通过调用super.clone()来实现clone()方法
public User clone()
throws CloneNotSupportedException
{
return (User)super.clone();
}
}
public class CloneTest {
public static void main(String[] args)
throws CloneNotSupportedException
{
User u1 = new User(29);
// clone得到u1对象的副本。
User u2 = u1.clone();
// 判断u1、u2是否相同
System.out.println(u1 == u2); //①
// 判断u1、u2的address是否相同
System.out.println(u1.address == u2.address); //②
}
}
3.运行结果
false
true
4.Object类提供的克隆机制图
Object类的clone()方法虽然简单易用,但它只是一种“浅克隆”,它只克隆该对象的所有成员变量值,不对引用类型的成员值所引用的对象进行克隆,该类提供的克隆机制如下图。