java clone 对象_JAVA对象clone方法代码实例解析

1.Cloneable接口

这个接口一个方法都没有,但是要使用clone方法,就必须实现这个接口,否则抛出CloneNotSupportedException异常

2.clone方法的返回值

先附上两个类代码

package pojo;

/**

* @Author : ZGQ

* @Date : 2020/3/11 22:12

* @Version : 1.0

*/

public class Person implements Cloneable{

String name;

int age;

public Person(String name, int age) {

this.name = name;

this.age = age;

}

@Override

protected Object clone() throws CloneNotSupportedException {

System.out.println(super.clone().getClass());

Person p = (Person) super.clone();

p.name=this.name;

p.age=this.age;

return p;

}

}

package pojo;

/**

* @Author : ZGQ

* @Date : 2020/3/11 22:21

* @Version : 1.0

*/

public class Girl extends Person {

char cup;

public Girl(String name, int age, char cup) {

super(name, age);

this.cup = cup;

}

@Override

public Object clone() throws CloneNotSupportedException {

System.out.println(super.clone().getClass());

Girl girl = (Girl) super.clone();

girl.cup=this.cup;

return girl;

}

@Override

public String toString() {

return "Girl{" +

"cup=" + cup +

", name='" + name + '\'' +

", age=" + age +

'}';

}

}

我一开始很困惑,为什么clone方法可以将父类的实例交给子类的引用,输出一看才知道,在第一次clone时,创建的就是子类的对象

再创建一个boys类,或者直接调用Person.clone也一样,谁调用clone方法,就创建谁的实例

调用girl.clone()

07530388a7bc80b0c084631815c36718.png

调用person.clone()

673180251abb2a8154f997e999e6accf.png

调用boy.clone()

373b20adef90ed357fe23b3d33568a6d.png

3.如果一个类没有实现Cloneable接口,那它就不可以被clone,它的子类也就不可能实现真正的深复制

多嘴一句,为什么不把clone方法定义在Cloneable中呢?

4.以上写法就是深复制的写法

5.为什么调用clone出来的是子类的实例呢?

可以显而易见的是确实这样比较合乎情理,但是java语言向我们隐瞒了实现细节,又是一个开后门的语法,像包装类可以使用运算符直接运算一样无耻

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值