Java:接口应用(Clonable 接口和深拷贝)

本文介绍了Java中Clonable接口的使用,Object类的clone方法实现原理,以及浅拷贝与深拷贝的区别。通过实例演示了如何在Student类中实现克隆功能,包括强制转换和实现Cloneable接口以进行深拷贝。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.引例

Java 中内置了一些很有用的接口, Clonable 就是其中之一.
Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 “拷贝”. 但是要想合法调用 clone 方法。必须要先实现 Clonable 接口。 否则就会抛出异常.
( CloneNotSupportedException )
如下所示,当我们要克隆一个我们已经实例化的Student类该怎么去实现呢?

class Student{
   
    private int age;
    public Student(int age) {
   
        this.age = age;
    }
    @Override
    public String toString() {
   
        return "Student{" +
                "age=" + age +
                '}';
    }
}
public class Test {
   
    public static void main(String[] args) {
   
        Student student1=new Student(10);
    }
}

首先,我们要知道Java中所有的类都继承Object类
当我们找到Object类的原码时,我们会发现一个clone()方法
在这里插入图片描述
那我们可能会想:既然所有的类都继承Object类,那当我们要克隆student1,直接通过student1.clon去调用这个克隆方法来实现克隆操作,但是真正去实现的时候就会发现以下问题:我们找不到这个方法。
在这里插入图片描述

2.Object中clone方法的实现

在这里插入图片描述
为什么找不到Object类中的clone方法呢,通过原码我们能看到Object类中clone方法由protected修饰
protected:同包下可以访问,不同包只有子类能访问
所以我们进行第一步,方法的重写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重写后可以引用clone方法了,但是我们会发现还是报错,因为引用的clone方法是父类的。
当我们要将它传给子类我们就要进行第二步:强制转换
在这里插入图片描述
强制转换后还是报错,这样我们就需要进行第三步:(涉及异常知识,后面再进行补充)

public class Test {
   
    public static void main(String[] args) throws CloneNotSupportedException {
   
        Student student1=new Student(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值