中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java抽象類與接口怎么定義使用

發布時間:2022-04-27 18:36:40 來源:億速云 閱讀:302 作者:iii 欄目:開發技術

這篇文章主要介紹“Java抽象類與接口怎么定義使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java抽象類與接口怎么定義使用”文章能幫助大家解決問題。

1.對象的比較

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

1.1 Comparable<T>

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

此接口里面只有一個compareTo抽象方法,結構如下:

Java抽象類與接口怎么定義使用

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

1.2 Comparator<T>

這個接口中有一個抽象方法compare,同樣是用來實現對象之間比較大小,方法的結構如下:

Java抽象類與接口怎么定義使用

Java抽象類與接口怎么定義使用

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

Java抽象類與接口怎么定義使用

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

2.克隆對象

2.1 Cloneable

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

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

Java抽象類與接口怎么定義使用

throws以及后面的語句不是現在的重點,暫時略過

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

2.2 深拷貝和淺拷貝

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

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

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

現在有一個類如下:

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方法中將其實例化后克隆給另一個對象,看看結果:

Java抽象類與接口怎么定義使用

此時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 +
                '}';
    }
}

 結果如下:

Java抽象類與接口怎么定義使用

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

出現這種結果的原因要從內存上看,在類A沒有進行修改之前內存如下:

Java抽象類與接口怎么定義使用

 類A修改后的內存如下:

Java抽象類與接口怎么定義使用

按照上圖來看,要實現深拷貝就需要把類B的內容再克隆一份,所以我們需要對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 +
                '}';
    }
}

Java抽象類與接口怎么定義使用

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

3.Object類

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

3.1 equals

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

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

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

3.2 toString

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

關于“Java抽象類與接口怎么定義使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

裕民县| 玉溪市| 新建县| 阳朔县| 南澳县| 雷山县| 扬中市| 宁武县| 洛南县| 湖南省| 山阴县| 西吉县| 商水县| 黎城县| 莱芜市| 苗栗县| 晋江市| 铜梁县| 四平市| 枝江市| 新源县| 吴桥县| 鄂托克前旗| 余干县| 泰宁县| 寻乌县| 尚志市| 三明市| 怀安县| 台东市| 陆丰市| 台州市| 桦甸市| 辛集市| 资源县| 云和县| 延边| 东辽县| 葵青区| 白玉县| 鄂伦春自治旗|