您的位置:首页 > 移动开发 > Objective-C

Java中Object类的clone()(克隆)方法

2015-02-11 23:04 288 查看
Java提供了一个projected修饰的clone()方法,该方法用来实现对象的“自我克隆”,即得到当前对象的一个副本,并且两个对象之间完全隔离。需要注意的是,由于该方法使用projected修饰,因此该方法只能被子类重写或者调用。

自定义类实现克隆的步骤如下:

1、首先自定义类需要实现Cloneable接口,该接口只是一个标记性接口(接口中没有定义任何方法),表明实现该接口的类可以实现“自身复制”;

2、自定义类实现自己的clone方法;

3、实现clone方法时通过super.clone();调用Object类的clone方法得到当前对象的副本,并放回该副本。

我们看以下的例子:

class Address{

String detail;

public Address(String detail){

this.detail = detail;

}

}

class User implements Cloneable{

int age;

Address address;

public User(int age){

this.age = age;

address = new Address("杭州");

}

public User clone() throws CloneNotSupportedException{

return (User)super.clone();

}

}

public class CloneTest {

public static void main(String[] args) throws CloneNotSupportedException {

User user = new User(28);

User user1 = user.clone();

System.out.println(user == user1);

System.out.println(user.address == user1.address);

}

}

输出结果是:

false

true

可以看出,克隆出来的对象只是原有对象的副本,因此在判断原有对象和克隆出来的对象是否相等时,返回false。虽然Object对象的clone方法虽然简单易用,但它正是一种浅克隆,即它克隆该对象的所有成员变量值,不会对引用类型的成员变量值所引用的对象进行克隆,因此比较两个对象的address时的返回值为true。

如果需要对对象进行深克隆,那么需要我们自己进行递归克隆,以保证所有引用成员变量所引用的对象都被复制。

《Java疯狂讲义》学习笔记。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: