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

Java由淺入深通關(guān)抽象類與接口下

 更新時間:2022年04月26日 15:03:41   作者:星鴉wyk  
在類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧

本篇介紹在對對象進行比較和克隆操作的時候會使用的接口,然后介紹一個類:Object

在Java中Object類默認是所有類的父類,里面有一些常用的方法會介紹

1.對象的比較

兩個對象要進行比較之前,我們首先需要確定依據(jù)什么來進行比較,對象中的成員變量那么多,直接比較是無法比較的

1.1 Comparable<T>

<T>是接口的參數(shù),里面填要比較的對象的類型

此接口里面只有一個compareTo抽象方法,結(jié)構(gòu)如下:

在類中實現(xiàn)此接口后就可以進行類和類之間的大小的比較

1.2 Comparator<T>

這個接口中有一個抽象方法compare,同樣是用來實現(xiàn)對象之間比較大小,方法的結(jié)構(gòu)如下:

和Comparable<T>接口所不同的是,Comparator<T>接口可以作為Arrays類中sort方法的參數(shù)

如果是元素為類的數(shù)組,使用Comparator<T>接口可以進一步進行數(shù)組排序

2.克隆對象

2.1 Cloneable

這個接口是一個空接口,但類需要實現(xiàn)此接口才能被克隆,而要重寫的方法則是Object類中的clone()方法

在IDEA中自動重寫的clone()方法如下:

throws以及后面的語句不是現(xiàn)在的重點,暫時略過

因為此方法的返回值是Object類,所以在使用的時候記得結(jié)果強制類型轉(zhuǎn)換成子類 

2.2 深拷貝和淺拷貝

既然說到克隆,那就不得不提深拷貝和淺拷貝,簡單說下二者的概念:

假設(shè)將A的內(nèi)容拷貝到B中,然后我們修改B中的內(nèi)容,如果A的內(nèi)容沒有改變,那么就是深拷貝,否則就是淺拷貝

需要說明的是:一個克隆方法是深拷貝還是淺拷貝和類里面的成員變量以及自己寫的代碼都有關(guān)系,兩個不同的類使用同一個克隆方法,一個是深拷貝,另一個是淺拷貝,這種情況是存在的

現(xiàn)在有一個類如下:

class A implements Cloneable{
    int i;
    int j;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                '}';
    }
}

我們在main方法中將其實例化后克隆給另一個對象,看看結(jié)果:

此時a并沒有因為b的改變而改變,clone()為深拷貝

我們再將類A進行改造:

class B implements Cloneable {
    int k;
}
class A implements Cloneable{
    int i;
    int j;
    B c=new B();
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                ", c.k=" + c.k +
                '}';
    }
}

 結(jié)果如下:

那么此時clone是深拷貝還是淺拷貝?

出現(xiàn)這種結(jié)果的原因要從內(nèi)存上看,在類A沒有進行修改之前內(nèi)存如下:

 類A修改后的內(nèi)存如下:

按照上圖來看,要實現(xiàn)深拷貝就需要把類B的內(nèi)容再克隆一份,所以我們需要對clone方法進行修改

class B implements Cloneable {
    int k;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
class A implements Cloneable{
    int i;
    int j;
    B c=new B();
    @Override
    protected Object clone() throws CloneNotSupportedException {
        A tmp=(A)super.clone(); 
        tmp.c=(B)this.c.clone();
        return tmp;
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                ", c.k=" + c.k +
                '}';
    }
}

至于為什么自己畫圖試試 ,這里就不講了

3.Object類

Object類中有一些常用的方法這里拿出來介紹

3.1 equals

在Object類中此方法是用來比較大小的,返回值是布爾值,底層的實現(xiàn)邏輯如下:

public boolean equals(Object obj) {
    return (this == obj); 
}

關(guān)于“==”,如果兩邊的變量是基本類型的變量,比較的是值是否相同,而如果是引用類型的變量的話,比較的則是地址是否相同

3.2 toString

輸出語句System.out.println()底層調(diào)用的就是toString方法,不過如果輸出的是引用類型數(shù)據(jù)默認是輸出修改后的地址,所以此時需要對其進行重寫,這也是上面的例子中有toString方法的原因

本篇結(jié)束,完

到此這篇關(guān)于Java由淺入深通關(guān)抽象類與接口下的文章就介紹到這了,更多相關(guān)Java抽象類與接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java基于RMI遠程過程調(diào)用詳解

    java基于RMI遠程過程調(diào)用詳解

    這篇文章主要為大家詳細介紹了java基于RMI遠程過程調(diào)用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 深入理解Java設(shè)計模式之橋接模式

    深入理解Java設(shè)計模式之橋接模式

    這篇文章主要介紹了JAVA設(shè)計模式之橋接模式的的相關(guān)資料,文中示例代碼非常詳細,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2021-11-11
  • springboot配置http跳轉(zhuǎn)https的過程

    springboot配置http跳轉(zhuǎn)https的過程

    SSL是為網(wǎng)絡(luò)通信提供安全以及保證數(shù)據(jù)完整性的的一種安全協(xié)議,SSL在網(wǎng)絡(luò)傳輸層對網(wǎng)絡(luò)連接進行加密,這篇文章主要介紹了springboot配置http跳轉(zhuǎn)https的過程,需要的朋友可以參考下
    2023-04-04
  • IDEA報錯:java:無效的源發(fā)行版21解決方式

    IDEA報錯:java:無效的源發(fā)行版21解決方式

    這篇文章主要給大家介紹了關(guān)于IDEA報錯:java:無效的源發(fā)行版21的解決方式,這個錯誤是因為你的項目使用的Java版本與你的IDEA使用的Java版本不一致導(dǎo)致的,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-06-06
  • 在IntelliJ IDEA中多線程并發(fā)代碼的調(diào)試方法詳解

    在IntelliJ IDEA中多線程并發(fā)代碼的調(diào)試方法詳解

    這篇文章主要介紹了在IntelliJ IDEA中多線程并發(fā)代碼的調(diào)試方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • MyBatis Mapper XML中比較操作符轉(zhuǎn)義問題解決

    MyBatis Mapper XML中比較操作符轉(zhuǎn)義問題解決

    在使用MyBatis編寫Mapper XML時,有時會遇到比較操作符需要進行轉(zhuǎn)義的情況,本文主要介紹了MyBatis Mapper XML中比較操作符轉(zhuǎn)義問題解決,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 一篇文章帶你玩轉(zhuǎn)Spring bean的終極利器

    一篇文章帶你玩轉(zhuǎn)Spring bean的終極利器

    這篇文章主要給大家介紹了關(guān)于玩轉(zhuǎn)Spring bean的終極利器的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用spring bean具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • 舉例說明Java設(shè)計模式編程中ISP接口隔離原則的使用

    舉例說明Java設(shè)計模式編程中ISP接口隔離原則的使用

    這篇文章主要介紹了Java設(shè)計模式編程中ISP接口隔離原則的使用,接口隔離原則主張一個類對另外一個類的依賴性應(yīng)當是建立在最小的接口上,需要的朋友可以參考下
    2016-02-02
  • Java設(shè)計模式之備忘錄模式使用詳解

    Java設(shè)計模式之備忘錄模式使用詳解

    這篇文章主要介紹了Java設(shè)計模式中備忘錄模式的使用,備忘錄設(shè)計模式也叫作快照模式,主要用于實現(xiàn)防丟失、撤銷、恢復(fù)等功能,本文將通過示例為大家講解備忘錄模式的定義與使用,需要的同學(xué)可以參考一下
    2024-02-02
  • Javaweb項目啟動Tomcat常見的報錯解決方案

    Javaweb項目啟動Tomcat常見的報錯解決方案

    Java Web項目啟動Tomcat時可能會遇到各種錯誤,本文就來介紹一下Javaweb項目啟動Tomcat常見的報錯解決方案,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論

博白县| 芜湖市| 桃园市| 抚松县| 武平县| 惠州市| 都安| 阜阳市| 西充县| 洱源县| 丹凤县| 蓬溪县| 麻城市| 江达县| 炎陵县| 开远市| 阳东县| 北流市| 台南市| 宕昌县| 竹北市| 普宁市| 武城县| 通山县| 澜沧| 新化县| 宜春市| 常宁市| 滁州市| 寿宁县| 阜城县| 罗平县| 宜城市| 平乐县| 惠州市| 穆棱市| 甘洛县| 九江市| 张家港市| 郎溪县| 青神县|