浅克隆

Person p2 = (Person) p1.clone();

clone()方法使用后得到p2p2p1指向不同的地址。但是如果p1中的属性是引用类型,那么不再对这个引用类型进行复制,而止于这个引用。

clone类

Ojbect类中clone()protected修饰,因此需要扩权。在Person中重写这个方法(并抛出异常)。同时需要实现cloneable接口,否则将报错。

代码

Person类

public class Person implements Cloneable{

    private String name;
private int age;
private Addr addr; public String getName() {
System.out.println(this+this.name);
return name;
}
public String getAddr() {
System.out.println(this+addr.city);
return addr.city;
}
public void setAddr(String city) {
this.addr.city = city;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

其中Person中的地址,是Addr类型:

public class Addr {
public String city;
}

Test类:

public class Test1 {

    public static void main(String[] args) {
Person p1 = new Person();
p1.setAge(11);
p1.setName("xiaoming");
p1.setAddr("南京");
p1.getName();
p1.getAddr();
Person p2=(Person) p1.clone();
p2.getName();
p2.getAddr();
}
}

得到结果,p1p2指定不同的区域,但是他们的addr指向同一区域。

最新文章

  1. 一个在线jpg png转ICO的网站
  2. clip:rect矩形剪裁
  3. EmberJs之数组绑定@each&[]
  4. Docker - Docker基础命令及使用
  5. OC笔记
  6. [SharpZipLib 未能加载文件或程序集] 解决方法
  7. codeforces C. Bits(数学题+或运算)
  8. 按键的使用方法(三)-------verilog
  9. MongoDB 学习笔记(二) 高级查询
  10. 关于c#中的Timer控件的简单用法
  11. PostgreSQL的initdb 源代码分析之五
  12. 乐在其中设计模式(C#) - 享元模式(Flyweight Pattern)
  13. Spring MVC整合DWR
  14. (十分钟视频教程)nodejs基础实战教程3:react服务端渲染入门篇
  15. C# datatable 重新排序
  16. 【EF6学习笔记】(十二)EF高级应用场景
  17. Qt::WindowFlags枚举类型解析
  18. Python3基础 iter+next 进行迭代时超出了范围 产生StopIteration异常
  19. [转] Java 基础
  20. 【Python项目】爬取新浪微博个人用户信息页

热门文章

  1. python中的__code__
  2. 压测工具siege和wrk
  3. 基于Ambari的WebUI部署Hive服务
  4. POJ 1126:Simply Syntax
  5. sqlserver 联接查询的一些注意点
  6. k8s常用github网站
  7. oracle提交commit后回退恢复
  8. HTML拖放
  9. GitHub上传家庭记账本
  10. 将list等分成n份