当前位置: 首页 > news >正文

Cloneable接口与clone方法---java

浅拷贝

我们知道,在浅拷贝的时候当前类必须实现 Cloneable 接口并重写 clone() 方法,,那么为什么必须实现 Cloneable 接口并重写 clone() 方法呢?

我们首先看一下Cloneable接口,可以看到 Cloneable 接口没有任何方法

package java.lang;
/**
 * @author  unascribed
 * @see     java.lang.CloneNotSupportedException
 * @see     java.lang.Object#clone()
 * @since   JDK1.0
 */
public interface Cloneable {
}

我们再看看位于Object类中的clone()这个函数方法。

protected native Object clone() throws CloneNotSupportedException;

首先是对这个方法的介绍,它是一个native标记的方法,它返回的是对该对象Object的拷贝。可能会出现CloneNotSupportedException异常。

为什么实现 Cloneable 接口

Cloneable 接口没有任何方法,它的唯一作用是 告知 JVM:某个类允许被克隆。
当你调用 obj.clone() 时,JVM 底层会检查 obj 的类是否实现了 Cloneable 接口

历史来源

Java 1.0 的设计者希望通过标记接口(而非注解,当时注解还未出现)让开发者显式声明类的克隆能力。
如果没有 Cloneable 接口,所有对象默认都可以被克隆,这可能带来安全隐患(例如克隆本应不可变的对象)。

为什么重写 clone 方法

这与 protected 修饰导致的权限问题有关
假设有一个类 MyClass(未重写 clone(),但实现了 Cloneable):

package com.example;

public class MyClass implements Cloneable {
    // 未重写 clone()
}

尝试在另一个包中调用 clone():

package another.package;

public class Test {
    public static void main(String[] args) {
        MyClass obj = new MyClass();
        obj.clone(); // 编译错误:clone() has protected access in Object
    }
}

关键限制:即使 MyClass 是 Object 的子类,跨包时无法直接通过子类实例访问父类的 protected 方法(除非子类重写并暴露该方法),跨包时连子类实例都无法访问自己的 protected 方法

相关文章:

  • 基于51单片机的压力测量报警proteus仿真
  • python数据类型等基础语法
  • Spring源码分析のregisterrefresh全过程(上)
  • C/C++动静态库的制作与原理 -- 静态库,动态库,目标文件,ELF文件,动态链接,静态链接
  • ChatGPT与DeepSeek:开源与闭源的AI模型之争
  • DeepSeek 助力 Vue3 开发:打造丝滑的网格布局(Grid Layout)
  • Selenium自动化测试:如何搭建自动化测试环境,搭建环境过程应该注意的问题
  • 基于Selenium的Python淘宝评论爬取教程
  • 基于yolov8的农作物叶子病害检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • Java数据结构第十五期:走进二叉树的奇妙世界(四)
  • 基于SSM实现的bbs论坛系统功能实现八
  • 第 11 章:当代定价问题总结
  • 使用ChatGPT-Deep Reaserch两步给出文献综述!
  • Linux服务升级:Almalinux 升级 DeepSeek-R1
  • 《信息论与编码》课程笔记——绪论和离散信源(一)
  • 【异地访问本地DeepSeek】Flask+内网穿透,轻松实现本地DeepSeek的远程访问
  • Autotestplat 在多个平台和公司推荐使用!
  • MyBatis-Plus 为简化开发而生【核心功能】
  • 最新Flutter导航拦截PopScope使用
  • 王道第三章栈和队列
  • 西宁市网站建设/淘宝宝贝关键词排名查询工具
  • 有代做医学统计图的网站吗/seo优化网站查询
  • 自建网站支付问题/苹果要做搜索引擎
  • 机场建设网站/武汉最新今天的消息
  • 网站建设情况调查表/万能bt搜索引擎
  • 公司主营网站开发怎么做账/网络营销的六大功能