关于如何实现 Object中的clone()方法

xiaoxiao2021-02-28  95

关于如何实现Object中的clone()方法 有以下2种情况。

情况1:需要克隆的对象只有基本数据类型或者String型

只需要2个步骤

克隆步骤1:实现Cloneable接口

克隆步骤2:覆盖clone方法,似情况,设置public权限。

具体代码如下:

/* * 如果类的成员变量只是primitive(String和基本数据类型),就只需要进行浅克隆。 * 浅克隆:只需要实现步骤1,与步骤2. */ public class User implements Cloneable{ //实现克隆第一步:实现Cloneable接口 private int age; private String name; public User(int age, String name) { this.age = age; this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } //实现克隆步骤2:覆盖clone方法,似情况,设置public权限。 @Override public Object clone() throws CloneNotSupportedException { // TODO Auto-generated method stub return super.clone(); } }

情况2:克隆对象中含有引用类型

此时需要增加步骤3:让引用的变量指向新的克隆体

具体代码如下:

/* * 如果类的成员变量只是primitive(String和基本数据类型),就只需要进行浅克隆。 * 浅克隆:只需要实现步骤1,与步骤2. * 深克隆还需实现步骤3. */ public class Account implements Cloneable{ //实现克隆第一步:实现Cloneable接口 private int age; private String name; private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Account(int age, String name,User user) { this.age = age; this.name = name; this.user=user; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } //实现克隆步骤2:覆盖clone方法,似情况,设置public权限。 @Override public Object clone() throws CloneNotSupportedException { //实现克隆步骤3:让引用的变量指向新的克隆体 Account a=(Account)(super.clone()); if(user!=null){ a.user=(User) user.clone(); } return a; }

转载请注明原文地址: https://www.6miu.com/read-45042.html

最新回复(0)