关于Object类的clone()方法

本文深入解析Java中对象克隆的实现原理,探讨clone()方法的使用误区,以及如何通过实现Cloneable接口和重写clone方法来正确实现对象的浅克隆与深克隆。

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

clone()方法是用于浅克隆或者深克隆一个java对象的,但是要注意一个误区:clone方法是Object类的,并不是Cloneable接口的,Cloneable只是一个标记接口,标记接口是用于标记实现该接口的类具有某种该接口标记的功能,常见的标记接口有三个:Serializable、Cloneable、RandomAccess,没有实现Cloneable接口,那么调用clone方法就会爆出CloneNotSupportedException异常。

要使得一个java类可以实现克隆,那么该类就需要实现Cloneable接口,并且重写基类Object的clone方法,其实Object的clone方法就已经默认有克隆的能力了,并且实现的是浅克隆,那为什么一定得重写clone方法呢?

我们先来看Object类的clone方法源码:

protected native Object clone() throws CloneNotSupportedException;

可以看到,该方法非常之特殊:

  1. 方法被native关键字修饰,并且该方法没有方法体,没有方法体的方法我们认为是抽象方法,可是Object类并不是一个抽象类,而是一个具体类,那为什么还能容纳抽象方法呢,其实就是native关键字在起作用,被native关键字修饰的方法属于本地方法,表示Java的作用范围已经无法达到,底层会去调用C语言或者C++的库。
  2. 该方法是被protected修饰,这就表明我们在子类中不重写此方法,就在子类外无法访问,因为这个protected权限是仅仅能在Object所在的包和子类能访问的,这也验证了子类重写父类方法权限修饰符可以变大但不能变小的说法。

所以我们要使得一个类具有clone的能力,可以先实现Cloneable接口,再重写clone方法,方法内部去调用了父类的clone方法,其实是为了扩大访问权限,也可以把protected改为public,以后再继承就不用重写了。当然这只是浅克隆的clone函数,深克隆就需要修改clone的方法体了。

public class Mytest implements  Cloneable{
    /**
     * 重写clone方法,调用父类默认的clone方法,实现的是浅克隆
     * @return
     * @throws CloneNotSupportedException
     */
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
### 回答1: 1. 打开终端,输入以下命令安装fcitx输入法: sudo apt-get install fcitx fcitx-config-gtk fcitx-table-wubi 2. 安装完毕后,打开“系统设置”-“语言支持”,将“键盘输入法系统”设置为fcitx。 3. 重新启动电脑,打开任意文本编辑器,按下Ctrl+Space键即可切换输入法,选择中文输入法即可开始输入中文。 ### 回答2: 在Linux系统下安装中文输入法有多种方法,以下是其中一种较常见的方法: 1. 打开终端,输入以下命令安装fcitx输入法框架: sudo apt-get install fcitx 2. 安装后,再次在终端中输入以下命令安装fcitx的输入法引擎: sudo apt-get install fcitx-googlepinyin 3. 安装完成后,打开系统设置,找到“地区和语言”或“语言支持”选项,在“输入源”或“键盘输入法系统”中选择fcitx作为默认输入法。 4. 重新启动电脑,启动时会自动加载fcitx输入法框架。 5. 在系统托盘中找到输入法图标,右键点击选择“配置”,进入fcitx配置页面。 6. 在配置页面中,点击“+”号添加中文输入法。一般情况下,选择“pinyin”或“googlepinyin”作为中文输入法。 7. 完成上述步骤后,就可以在需要输入中文的应用程序中使用中文输入法了。在输入框中点击右键,选择“切换输入法”,或使用快捷键(默认为Ctrl + Space)进行切换。 需要注意的是,以上方法适用于大多数Linux系统,对于不同的发行版可能会有细微的差异。对于某些特定的发行版,也可以通过软件包管理器直接搜索和安装相应的中文输入法。另外,还可以通过其他输入法框架,如ibus,来安装和使用中文输入法。 ### 回答3: 要在Linux系统中安装中文输入法,可以按照以下步骤进行操作。 第一步,打开终端窗口,在终端中输入以下命令,以安装ibus输入法框架: sudo apt-get install ibus 第二步,再次在终端中输入以下命令,以安装ibus-pinyin中文输入法: sudo apt-get install ibus-pinyin 第三步,在终端中输入以下命令,以重新启动ibus服务: ibus restart 第四步,打开系统设置,选择“区域与语言”或类似选项,找到“输入源”或“输入法”,然后添加中文输入法。 第五步,在输入法选项中选择新添加的中文输入法,这样就完成了中文输入法的安装。 在使用中文输入法时,可以通过以下方法进行切换: 方法一,使用快捷键:按下Ctrl+空格键,切换输入法。 方法二,通过任务栏中的输入法图标:点击输入法图标,然后从弹出的菜单中选择所需的输入法。 安装中文输入法后,可以在几乎所有的应用程序中使用中文输入。通过切换输入法,可以方便地在中文和其他语言之间切换,满足自己的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值