最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA對象clone方法代碼實(shí)例解析

 更新時(shí)間:2020年03月13日 14:15:02   作者:斷腿三郎  
這篇文章主要介紹了JAVA對象clone方法代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1.Cloneable接口

這個(gè)接口一個(gè)方法都沒有,但是要使用clone方法,就必須實(shí)現(xiàn)這個(gè)接口,否則拋出CloneNotSupportedException異常

2.clone方法的返回值

先附上兩個(gè)類代碼

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方法可以將父類的實(shí)例交給子類的引用,輸出一看才知道,在第一次clone時(shí),創(chuàng)建的就是子類的對象

再創(chuàng)建一個(gè)boys類,或者直接調(diào)用Person.clone也一樣,誰調(diào)用clone方法,就創(chuàng)建誰的實(shí)例

調(diào)用girl.clone()

調(diào)用person.clone()

調(diào)用boy.clone()

3.如果一個(gè)類沒有實(shí)現(xiàn)Cloneable接口,那它就不可以被clone,它的子類也就不可能實(shí)現(xiàn)真正的深復(fù)制

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

4.以上寫法就是深復(fù)制的寫法

5.為什么調(diào)用clone出來的是子類的實(shí)例呢?

可以顯而易見的是確實(shí)這樣比較合乎情理,但是java語言向我們隱瞞了實(shí)現(xiàn)細(xì)節(jié),又是一個(gè)開后門的語法,像包裝類可以使用運(yùn)算符直接運(yùn)算一樣無恥

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之?dāng)?shù)組

    Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之?dāng)?shù)組

    數(shù)組是有序的元素序列,若將有限個(gè)類型相同的變量的集合命名,那么這個(gè)名稱為數(shù)組名。組成數(shù)組的各個(gè)變量稱為數(shù)組的分量,也稱為數(shù)組的元素,有時(shí)也稱為下標(biāo)變量。數(shù)組是在程序設(shè)計(jì)中,為了處理方便, 把具有相同類型的若干元素按有序的形式組織起來的一種形式
    2022-02-02
  • spring boot中interceptor攔截器未生效的解決

    spring boot中interceptor攔截器未生效的解決

    這篇文章主要介紹了spring boot中interceptor攔截器未生效的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JavaSE反射、枚舉、lambda表達(dá)式常用方法舉例

    JavaSE反射、枚舉、lambda表達(dá)式常用方法舉例

    這篇文章主要介紹了JavaSE反射、枚舉、lambda表達(dá)式常用方法的相關(guān)資料,反射允許在運(yùn)行時(shí)檢查和操作類、方法和屬性,枚舉提供了一種更安全和優(yōu)雅的方式來定義常量,而Lambda表達(dá)式則簡化了函數(shù)式接口的實(shí)現(xiàn),需要的朋友可以參考下
    2024-12-12
  • Java中的三種代理模式詳解

    Java中的三種代理模式詳解

    這篇文章主要介紹了Java中的三種代理模式詳解,代理模式的關(guān)鍵點(diǎn)是:代理對象與目標(biāo)對象.代理對象是對目標(biāo)對象的擴(kuò)展,并會調(diào)用目標(biāo)對象,文中提供了部分代碼,需要的朋友可以參考下
    2023-08-08
  • Springboot使用Rabbitmq的延時(shí)隊(duì)列+死信隊(duì)列實(shí)現(xiàn)消息延期消費(fèi)

    Springboot使用Rabbitmq的延時(shí)隊(duì)列+死信隊(duì)列實(shí)現(xiàn)消息延期消費(fèi)

    本文介紹了RabbitMQ的延時(shí)隊(duì)列和死信隊(duì)列,解釋了它們的工作原理及其應(yīng)用場景,延時(shí)隊(duì)列允許消息在設(shè)定的時(shí)間后被消費(fèi),結(jié)合實(shí)際案例,展示了如何實(shí)現(xiàn)和使用延時(shí)隊(duì)列和死信隊(duì)列,感興趣的朋友一起看看吧
    2025-01-01
  • maven打包所有依賴對外提供sdk.jar

    maven打包所有依賴對外提供sdk.jar

    這篇文章主要介紹了maven打包所有依賴,對外提供sdk.jar,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java中Klass模型與類加載的詳細(xì)機(jī)制

    Java中Klass模型與類加載的詳細(xì)機(jī)制

    這篇文章主要介紹了Java中Klass模型與類加載的詳細(xì)機(jī)制,java語言是在jvm中運(yùn)行而jvm是不認(rèn)識java代碼的我們使用javac編譯的class文件jvm是不認(rèn)識的 所以有一個(gè)類加載的動(dòng)作 這個(gè)動(dòng)作就是把class字節(jié)碼拼裝成一個(gè)klass類型,需要的朋友可以參考下
    2023-08-08
  • Spring MVC中使用Controller如何進(jìn)行重定向

    Spring MVC中使用Controller如何進(jìn)行重定向

    這篇文章主要介紹了Spring MVC中使用Controller如何進(jìn)行重定向操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • IDEA中maven無法下載源碼的解決方法

    IDEA中maven無法下載源碼的解決方法

    這篇文章主要為大家詳細(xì)介紹了當(dāng)IDEA中maven無法下載源碼時(shí)改如何解決,文中通過圖文為大家進(jìn)行了詳細(xì)講解,需要的小伙伴可以參考一下
    2023-08-08
  • SpringBoot零基礎(chǔ)入門之基本操作與概念

    SpringBoot零基礎(chǔ)入門之基本操作與概念

    這篇文章主要介紹了SpringBoot的概念、創(chuàng)建和運(yùn)行,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評論

大同县| 安庆市| 巢湖市| 崇阳县| 东兴市| 图片| 张掖市| 汕尾市| 东乌珠穆沁旗| 铅山县| 兰考县| 大港区| 南投县| 垫江县| 金华市| 德令哈市| 昭觉县| 红桥区| 手游| 平湖市| 开远市| 威海市| 闻喜县| 万安县| 高要市| 固原市| 阜新| 池州市| 密云县| 隆尧县| 保定市| 华阴市| 基隆市| 格尔木市| 南丹县| 清原| 株洲县| 汕头市| 靖州| 龙岩市| 普定县|