java super.clone 实现Cloneable接口
首先,如果允许本来被克隆,需要实现 实现Cloneable接口
并且重写clone方法,且方法最好为public,这样方便别人调用
其中:super.clone并不是简单的说成是调用父类的clone方法,这样的话你很难想通,为什么调用父类的clone,对吧?
因为Object的clone方法使用了RTTI(运行时类型识别)机制,可以动态的找到目前正在调用clone方法的那个引用,并找到它指向的对象,然后根据这个对象的大小去申请内存空间,然后进行bitwise(逐位)的复制, 将该对象的内存空间完全复制到新的空间中去,
从而达到克隆的目的.
即,谁调用clone方法,就克隆这引用指向的对象
子类没有clone方法,使用this.clone()则直接异常,,因为是子类继承Object的
比如你有一个Student类实现了Cloneable接口,重写了clone方法,但是重写的clone方法里的执行super.clone,并不是说和自身无关,
例如: Student stu=new student();
Student stu1=(Student)stu.clone();
当执行stu.clone();时候,虽然clone方法里面执行的是super.clone(),但是Object的clone方法会寻找当前正在调用clone方法的那个引用,这里这个引用就是stu,然后自动的去找stu指向的对象,然后进行逐位赋值,从而达到克隆的目的,
还有继承的时候,A类实现了Cloneable接口,重写了了clone方法,那继承A类的类就不必实现Cloneable接口以及重写clone方法了,因为A类已经这么做了。而当子类调用clone方法的时候,是根据调用clone方法的当前引用去克隆的,
还是那句话,谁调用clone方法,就克隆当前引用指向的对象
ps:网上都是互相抄的,我用自己理解翻译解释一下,呵呵
相关推荐
被克隆对象 如果返回的值是 super.clone(); 此时属于浅拷贝 * * 浅拷贝 * 1)成员变量是,基本数据类型,此时浅拷贝是值传递。其中一个对象的值修改后,不会影响到另一个对象的值。 * 2)成员变量是,引用数据...
Java克隆(Clone)是Java语言的特性之一,本篇文章主要介绍了Java中的Clone机制是如何工作的,需要的朋友可以参考下
浅克隆: package testclone; public class ShallowClone implements Cloneable { public String name; public String[] name2;... o = (ShallowClone) super.clone(); } catch (CloneNotSupportedException
最流行的Nintendo Super Mario Bros游戏的javascript克隆。 安装 下载ZIP或克隆存储库 安装资产 // Using Yarn yarn install // Using NPM npm install 运行游戏服务器 // Using Yarn yarn serve // Using NPM npm ...
超级六边形Super Haxagon是适用于Nintendo 3DS,Nintendo Switch,Windows,Linux和 (是的,计算器)的跨平台,开源克隆。... 使用git clone https://github.com/RedTopper/Super-Haxagon.git --recursive克隆此存
超级多开「Super Clone」v3.8.50.0416 for Android 完美解锁会员版 —— 一款可以无限克隆与应用分身的应用
$ git clone https://github.com/futurice/futurice-super.git # ... $ npm start 注意。 /index.html仅在npm start时生成一次。 开发时,您可能希望将浏览器指向/nonvulcanized.html 。 要配置应用程序,您需要...
所以很少存在简单重复的工作,加上Java 代码的精炼性和面向对象纯洁性(设计模式是 java 的灵魂),编程工作将变成一个让你时刻 体验创造快感的激动人心的过程. 为能和大家能共同探讨"设计模式",我将自己在学习中的心得...
超市独奏描述安装和配置 Supermarket。用法要求平台Ubuntu (= 14.04)食谱: 适合 (~> 2.7.0) 烦恼 (~> 1.0.0) ... 克隆项目运行$ git clone https://github.com/ourtownrentals/chef-supermarket-solo.git耙运行rake -
克隆存储库: $ git clone https://github.com/meozz2109/my-source-code.git 或下载为 zip 并解压缩。 从根目录运行或在根目录中安装 PyGame 1.9.x: $ pip install pygame 输入以下命令进入 Pygame-Superman ...
安装克隆机器人库,终端类型为git clone https://github.com/xviefvs/djs-base (需要安装git)。 在终端中输入cd djs-base 。 之后键入npm i或yarn 使用代码编辑器打开项目(建议使用Visual Studio Code)。 在.env...
如何开始 :rocket: 克隆此存储库(组织存储库名称是起源) 。 $ git clone https://github.com/codeUnionX/super-village.git fork tihs存储库clone에토토토한한가한다。 미기포크하기(이미지추가추정) 远程...
$ git clone https://github.com/Ju99ernaut/super-fastapi.git $ cd superfast-api 创建虚拟环境 $ python -m venv venv 激活虚拟环境 Linux / MacOS: source venv/bin/activate Windows: .\venv\Scripts\...
SUPER-ULTRA-SIMPE-TO-DO APP 简单的待办事项应用程序的服务器端实现安装: 克隆此存储库: $ git clone https://github.com/meobilivang/super-ultra-simple-to-do-app.git设置开发环境: 请确保您具有以下各项以...
克隆此存储库: git clone https://github.com/super-ast/analyzers.git 将当前工作目录更改为存储库位置: cd analyzers 初始化并下载存储库子模块: git submodule update --init --recursive 创建一个build...
使用this.clone()克隆对象 例子: var Class = function() {}; var Stuff = extend(Class, { statics: { COLOR_RED: 'red', COLOR_BLUE: 'blue' }, setColor: function(color) { this.color = color; ...
克隆存储库: $ git clone https://github.com/TorchAblaze/super-galactic-age-calculator.git 导航到计算机上的super-galactic-age-calculator目录 用您喜欢的文本编辑器打开以查看代码库 要启动开发服务器并在...
Super Awesome Co.刚刚被要求构思一个新的Reddit主题。 这是最后一分钟,但是我们需要提出一些概念,以便在明天之前向他们提出建议。 这对我们来说可能是巨大的,并且确实使我们的商店浮出水面。 我们必须立即删除...
git clone https://github.com/WilliamBz12/super-hero-app cd superhero-app 安装依赖项 flutter pub get 正在运行的应用 flutter run 运行测试 flutter test 测试是针对肘和存储库构建的,可能会发生几种情况:...