Rumah  >  Artikel  >  Java  >  Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

WBOY
WBOYke hadapan
2023-05-05 19:43:051430semak imbas

1. Perbandingan objek

Sebelum membandingkan dua objek, kita perlu terlebih dahulu menentukan apa yang hendak dibandingkan. Terdapat begitu banyak pembolehubah ahli dalam objek, perbandingan langsung adalah mustahil

1.1 Sebanding >

Selepas melaksanakan antara muka ini dalam kelas, anda boleh membandingkan saiz antara kelas

1.2 ComparatorBagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

Ini Terdapat perbandingan kaedah abstrak dalam antara muka, yang juga digunakan untuk membandingkan objek Struktur kaedah adalah seperti berikut:

<.> dan Sebanding< ;T>Perbezaan antara antara muka ialah antara muka Comparator boleh digunakan sebagai parameter kaedah isihan dalam kelas ArraysBagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

Jika ia ialah tatasusunan yang elemennya ialah kelas, gunakan Comparator2 objek Klon

Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java2.1 Boleh Diklon

Antara muka ini kosong. antara muka, tetapi kelas perlu melaksanakan antara muka ini untuk diklonkan Kaedah yang ditulis semula ialah kaedah klon() dalam kelas Objek

Kaedah klon() ditulis semula secara automatik dalam IDEA adalah seperti berikut:

Anggapkan bahawa kandungan A disalin ke B, dan kemudian kami Ubah suai kandungan dalam B. Jika kandungan A tidak berubah, maka ia adalah salinan yang mendalam, jika tidak ia adalah salinan cetek

Apa yang perlu dijelaskan ialah: sama ada kaedah pengklonan ialah salinan dalam atau salinan cetek dan pembolehubah ahli dalam kelas dan dirinya sendiri Kod yang anda tulis adalah berkaitan Dua kelas berbeza menggunakan pengklonan yang sama kaedah, satu salinan dalam dan satu lagi salinan cetek. Keadaan ini wujud

Kini terdapat kelas seperti berikut:

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 +
                &#39;}&#39;;
    }
}
Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak JavaKami membuat instantiat dalam kaedah utama dan mengklonkannya ke. objek lain untuk melihat hasil:

Pada masa ini, a tidak berubah kerana perubahan b , klon() ialah salinan dalam

Kami kemudian mengubah kelas 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 +
                &#39;}&#39;;
    }
}

Hasilnya adalah seperti berikut:

Kemudian klon pada masa ini Adakah salinan dalam atau salinan cetek?

Sebab keputusan ini bergantung pada ingatan Sebelum kelas A diubah suai, ingatan adalah seperti berikut:

Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

Memori kelas A selepas pengubahsuaian. adalah seperti berikut :

Mengikut gambar di atas, untuk melaksanakan salinan dalam, kita perlu mengklon kandungan kelas B sekali lagi, jadi kita perlu mengubah suai kaedah klon

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 +
                &#39;}&#39;;
    }
}
Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

Mengapa anda cuba melukis sendiri, saya tidak akan masuk ke sini

3 Kelas objek

Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak JavaAda beberapa kaedah yang biasa digunakan dalam kelas Object di sini dan perkenalkan

3.1 sama dengan

Dalam kelas Object, kaedah ini digunakan untuk membandingkan saiz nilai Boolean logik pelaksanaan adalah seperti berikut: Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java

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

Mengenai " ==", jika pembolehubah pada kedua-dua belah adalah pembolehubah jenis asas, perbandingannya adalah sama ada nilai adalah sama, dan jika ia pembolehubah jenis rujukan, perbandingannya ialah sama ada alamatnya sama

3.2 toString

Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak JavaLapisan bawah kenyataan output System.out.println() memanggil kaedah toString Walau bagaimanapun, jika output adalah jenis rujukan data, alamat yang diubah suai dikeluarkan secara lalai, jadi ia perlu ditulis semula pada masa ini. Ini juga berlaku dalam contoh di atas Sebab kaedah toString

Atas ialah kandungan terperinci Bagaimana untuk menentukan dan menggunakan kelas dan antara muka abstrak Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam