博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础面试题:写clone()方法时,通常都有一行代码,是什么?
阅读量:6540 次
发布时间:2019-06-24

本文共 1715 字,大约阅读时间需要 5 分钟。

clone()方法 与new constructor()构造器创建对象不同 是克隆一个新的对象

package com.swift;public class Clone_Test {    public static void main(String[] args) {        Person p = new Person(23, "zhang");        Person p1 = p;                System.out.println(p);        System.out.println(p1);    }}class Person{    private int age;    private String name;    public Person(int age, String name) {        this.age = age;        this.name = name;    }}

Person p1=p; 这个不是对象的克隆 是引用的复制 因为p p1的地址相同

克隆的方法

实现Cloneable接口 覆写clone()方法 克隆要先克隆父类 所以要super.clone();

package com.swift;public class Clone_Test {    public static void main(String[] args) throws CloneNotSupportedException {        Person p = new Person(23, "zhang");        Person p1 = (Person) p.clone();                System.out.println(p);        System.out.println(p1);    }}class Person implements Cloneable{    private int age;    private String name;    public Person(int age, String name) {        this.age = age;        this.name = name;    }    @Override    protected Object clone() throws CloneNotSupportedException {        return super.clone();    }}

这是克隆的p1和p的内存地址已经不同

如果要克隆的对象中还包含其他对象

则克隆后的对象是 浅拷贝 的而不是 深拷贝 的 克隆前后对象中的对象都是同一个对象

如果要深拷贝则要在clone() 方法中把对象中的对象也进行克隆

class Body implements Cloneable{      public Head head;      public Body() {}      public Body(Head head) {
this.head = head;} @Override protected Object clone() throws CloneNotSupportedException { Body newBody = (Body) super.clone(); //克隆了body newBody.head = (Head) head.clone(); //深入克隆newBody中的对象 return newBody; } }

完全的深拷贝是不可能的,如果head还有face face还有eye,如果不一只深克隆下去就无法实现完全的深克隆

所以面试题通常都有的一句是super.clone();

转载于:https://www.cnblogs.com/qingyundian/p/8329927.html

你可能感兴趣的文章
网上的仿QQ验证码,详细使用方法
查看>>
[洛谷P1114] “非常男女”计划
查看>>
使用ms owin 搭建oauth2 server
查看>>
01-flask开始
查看>>
javabean 实体类的转换
查看>>
操作系统-存储器管理
查看>>
Linux 查找字符所在的文件
查看>>
复利计算5.0—结队编程(总结)
查看>>
分布式配置 tachyon 并执行Hadoop样例 MapReduce
查看>>
N线城市码农生存指南
查看>>
Node REPL环境
查看>>
2017.6.13学习记录
查看>>
201621123057 《Java程序设计》第6周学习总结
查看>>
python里面的xlrd模块
查看>>
spring mvc中的@PathVariable
查看>>
7.1.6、自定义键数组
查看>>
js邮箱验证,身份证验证,正则表达式
查看>>
javascript 刷新页面 关闭窗口[转]
查看>>
桶排序及一些其应用
查看>>
Thymeleaf 3.0 专题
查看>>