自定义类实现自我克隆

自定义类实现自我克隆

  • 自定义类实现 Cloneable 接口。这是一个标记接口,实现该接口的对象可以实现“自我克隆”,接口里没有定义任何方法。

  • 自定义类实现自己的 clone ()方法。

  • 实现clone()方法时通过 super。clone();调用 Object实现的clone() 方法来得到对象的副本,并返回该副本。

 package com.hans.myClass;
 ​
 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("西安高新");
     }
 ​
     @Override
     protected User clone() throws CloneNotSupportedException {
         return (User) super.clone();
     }
 }
 ​
 public class CloneTest {
 ​
     public static void main(String[] args) throws CloneNotSupportedException {
         User user1 = new User(22);
         User user2 = user1.clone();
         System.out.println(user1 == user2);//返回false
         System.out.println(user1.address == user2.address);//返回true
     }
 ​
 }

Object 类提供的Clone 机制只对对象里个实例变量进行“简单复制”,如果实例变量的类型是饮用类型,Object 的 Clone 机制也只是简单地复制这个引用变量,这样原对象的引用类型的实例变量与克隆对象的引用类型的实例变量依然只想内存中的同一个实例。

Object 类提供的 Clone()方法逼近能简单地“复制”对象问题,而且这种“自我克隆”机制十分高效。比如 clone 一个包含 100 个元素的 int[] 数组,用系统默认 clone 方法比静态 copy 方法快近两倍。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值