亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2020年03月13日 14:15:02   作者:斷腿三郎  
這篇文章主要介紹了JAVA對(duì)象clone方法代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(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)建的就是子類的對(duì)象

再創(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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot如何導(dǎo)出Jar包并測試(使用IDEA)

    SpringBoot如何導(dǎo)出Jar包并測試(使用IDEA)

    這篇文章主要介紹了SpringBoot如何導(dǎo)出Jar包并測試(使用IDEA),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring中的EurekaServer啟動(dòng)詳解

    Spring中的EurekaServer啟動(dòng)詳解

    這篇文章主要介紹了Spring中的EurekaServer啟動(dòng)詳解,初始化eureka,包含eureka集群的同步和發(fā)布注冊(cè),這個(gè)方法時(shí)重寫ServletContextListener#contextInitialized,是eureka啟動(dòng)的入口了,需要的朋友可以參考下
    2023-11-11
  • Springcloud Stream消息驅(qū)動(dòng)工具使用介紹

    Springcloud Stream消息驅(qū)動(dòng)工具使用介紹

    SpringCloud Stream由一個(gè)中間件中立的核組成,應(yīng)用通過SpringCloud Stream插入的input(相當(dāng)于消費(fèi)者consumer,它是從隊(duì)列中接收消息的)和output(相當(dāng)于生產(chǎn)者producer,它是發(fā)送消息到隊(duì)列中的)通道與外界交流
    2022-09-09
  • Java面向?qū)ο缶幊讨衒inal關(guān)鍵字的使用方法詳解

    Java面向?qū)ο缶幊讨衒inal關(guān)鍵字的使用方法詳解

    這篇文章主要介紹了Java面向?qū)ο缶幊讨衒inal關(guān)鍵字的使用方法詳解,包括對(duì)內(nèi)部匿名類無法訪問外面的非 final 的變量問題的解讀,需要的朋友可以參考下
    2016-06-06
  • MyBatis limit分頁設(shè)置的實(shí)現(xiàn)

    MyBatis limit分頁設(shè)置的實(shí)現(xiàn)

    這篇文章主要介紹了MyBatis limit分頁設(shè)置的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • SpringBoot+VUE實(shí)現(xiàn)前后端分離的實(shí)戰(zhàn)記錄

    SpringBoot+VUE實(shí)現(xiàn)前后端分離的實(shí)戰(zhàn)記錄

    這篇文章主要介紹了SpringBoot+VUE實(shí)現(xiàn)前后端分離的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • IDEA下因Lombok插件產(chǎn)生的Library source does not match the bytecode報(bào)錯(cuò)問題及解決方法(親測可用)

    IDEA下因Lombok插件產(chǎn)生的Library source does not match the bytecode報(bào)

    這篇文章主要介紹了IDEA下因Lombok插件產(chǎn)生的Library source does not match the bytecode報(bào)錯(cuò)問題及解決方法,親測試過好用,需要的朋友可以參考下
    2020-04-04
  • Java設(shè)計(jì)模式之代理模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java設(shè)計(jì)模式之代理模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java設(shè)計(jì)模式之代理模式,本文詳細(xì)的介紹了什么事代理模式和相關(guān)的類和接口,有興趣的可以了解一下
    2017-08-08
  • 基于springboot+enum配置化的方法

    基于springboot+enum配置化的方法

    本文主要介紹利用Springboot結(jié)合枚舉類enum進(jìn)行自定義參數(shù)的初始化和應(yīng)用,通過@Value注解實(shí)現(xiàn)參數(shù)的動(dòng)態(tài)注入,以實(shí)現(xiàn)靈活可維護(hù)的配置管理,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • Java可以如何實(shí)現(xiàn)文件變動(dòng)的監(jiān)聽的示例

    Java可以如何實(shí)現(xiàn)文件變動(dòng)的監(jiān)聽的示例

    本篇文章主要介紹了Java可以如何實(shí)現(xiàn)文件變動(dòng)的監(jiān)聽的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-02-02

最新評(píng)論