JavaRush /Blog Java /Random-MS /Perbezaan antara kata kunci ini dan super dalam Java
grishin
Tahap
Харьков

Perbezaan antara kata kunci ini dan super dalam Java

Diterbitkan dalam kumpulan
thisdan superialah dua kata kunci khas dalam Java yang masing-masing mewakili contoh semasa kelas dan superclassnya. Pengaturcara Java sering mengelirukan perkataan ini dan menunjukkan sedikit kesedaran tentang sifat istimewa mereka, yang sering ditanya tentang temu bual Java Core. Sebagai contoh, beberapa soalan yang segera muncul di fikiran adalah tentang thisdan super, Adakah mungkin untuk memberikan makna yang berbeza kepada kata kunci thisdalam Java? dan apakah perbezaan antara kata kunci thisdan superdalam Java. Tak tahu? Baiklah, saya tidak memberikan jawapan di sini - ia boleh didapati di penghujung artikel. Perbezaan antara kata kunci ini dan super dalam Java - 1Jadi, seperti yang saya katakan pada mulanya, perbezaan utama antara thisdan superdalam Java ialah thiscontoh semasa kelas mewakili, manakala supercontoh semasa kelas induk mewakili. Berikut ialah satu contoh penggunaan pembolehubah thisdan super- anda mungkin telah melihat contoh memanggil pembina satu daripada yang lain, yang dipanggil. memanggil pembina dalam rantaian, ini boleh dilakukan melalui penggunaan kata kunci thisdan super. Di dalam kelas, untuk memanggil pembina tanpa hujahnya, digunakan this(), manakala super()ia digunakan untuk memanggil pembina tanpa hujah, atau kerana ia juga dipanggil, pembina lalai kelas induk. Dengan cara ini, dengan cara ini anda boleh memanggil bukan sahaja pembina tanpa hujah, tetapi juga mana-mana pembina lain dengan memberikan parameter yang sesuai. thisKita akan melihat contoh penggunaan ini tidak lama lagi super. Juga di thisJava supermereka digunakan untuk mengakses pembolehubah contoh kelas dan induknya. Malah, ia boleh diakses tanpa awalan superdan this, tetapi hanya jika dalam blok semasa pembolehubah tersebut tidak bertindih dengan pembolehubah lain, i.e. jika ia tidak mengandungi pembolehubah tempatan dengan nama yang sama, jika tidak, anda perlu menggunakan nama dengan awalan, tetapi ini tidak penting, kerana dalam bentuk ini mereka lebih mudah dibaca. Contoh klasik pendekatan ini ialah menggunakan thispembina di dalam yang mengambil parameter dengan nama yang sama dengan pembolehubah contoh. Kemudian dalam artikel itu kita akan mengetahui apakah perbezaan lain yang terdapat antara superdan this, dan melihat beberapa contoh penggunaannya.

Bagaimana ini dan super adalah serupa

Sebelum melihat perbezaan antara kata kunci thisdan super, mari kita lihat beberapa persamaannya:
  1. Kedua-duanya this, dan superpembolehubah bukan statik, jadi ia tidak boleh digunakan dalam konteks statik, yang bermaksud ia tidak boleh digunakan dalam kaedah utama. Ini akan mengakibatkan ralat masa kompilasi "pembolehubah bukan statik thistidak boleh dirujuk daripada konteks statik". Perkara yang sama berlaku jika anda menggunakan kata kunci dalam kaedah utama super.

  2. Kedua-duanya this, dan superboleh digunakan di dalam pembina untuk memanggil pembina lain dalam rantai, contohnya, this() dan super() memanggil pembina tanpa hujah kelas pewarisan dan induk, masing-masing.
Dalam contoh di bawah, kita mula-mula menghantar panggilan daripada pembina tanpa hujah kelas B kepada pembina kelas B yang sama yang mengambil satu parameter jenis String, yang seterusnya super("")memanggil pembina satu hujah daripada superclass.
class A{

    A(){
        System.out.println("Конструктор без аргументов класса A");
    }

    A(String args){
        System.out.println("Конструктор с одним аргументом класса A");
    }
}

class B extends A{

   B(){
        this(""); // вызов конструктора с одним аргументом класса B
        System.out.println("Конструктор без аргументов класса B");
    }

   B(String args){
        super(""); // вызов конструктора с одним аргументом класса A
        System.out.println("Конструктор с одним аргументом класса B");
    }
}

// Тест-класс и вывод
public class Test {

    public static void main(String args[]) {
       B b = new B();
    }

}
Output: Pembina satu hujah kelas A Pembina satu hujah kelas B Pembina tiada hujah kelas B
  1. Di dalam constructor this, dan supermesti muncul di atas semua ungkapan lain, pada awal-awal lagi, jika tidak, pengkompil akan mengeluarkan mesej ralat. Dari mana ia mengikuti bahawa satu pembina tidak boleh mengandungi kedua-duanya this(), dan super().

Perbezaan antara super dan ini

Sekarang kita tahu cara menggunakan kata kunci superdan thismemahami perkara itu diperlukan. Tetapi terdapat satu lagi pilihan untuk menggunakan kata kunci ini yang saya tidak nyatakan - dalam kelas Dalam, di mana dengan bantuan mereka adalah sangat mudah untuk merujuk kepada kelas luar menggunakan borang notasi Luar. thisuntuk contoh semasa dan Luar. super- untuk ibu bapanya. Jangan lupa gantikan Outer dengan nama outer class. Sekarang mari kita senaraikan secara ringkas perbezaan utama antara kata kunci thisdansuper
  1. pembolehubah thismerujuk kepada contoh semasa kelas di mana ia digunakan, manakala ia supermerujuk kepada contoh semasa kelas induk.

  2. Setiap pembina, jika tiada panggilan eksplisit kepada pembina lain, secara tersirat memanggil super()pembina tanpa hujah bagi kelas induknya, tetapi anda sentiasa mempunyai pilihan untuk memanggil secara eksplisit mana-mana pembina lain dengan sama ada this(), atau super().
Ini mungkin semua yang boleh dikatakan tentang perbezaan antara kata kunci thisdan superdalam Java dan cara ia digunakan dalam program. Seperti yang telah kita lihat, tujuan utama mereka adalah untuk memanggil satu pembina daripada yang lain dan merujuk kepada pembolehubah contoh yang diisytiharkan dalam kelas semasa dan kelas induknya. Jangan lupa bahawa ini bukan pembolehubah biasa, dan sekarang - jawapan kepada soalan saya, yang saya tanya dalam perenggan pertama. Tidak, pembolehubah thistidak boleh diberikan nilai baharu kerana ia diisytiharkan muktamad. Anda boleh cuba melakukan ini dalam IDE - anda akan menerima ralat kompilasi "anda tidak boleh memberikan nilai baharu kepada pembolehubah this- ia diisytiharkan muktamad." Artikel asal di sini .
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION