JavaRush /Java Blog /Random-ID /Perbedaan antara kata kunci ini dan kata kunci super di J...
grishin
Level 27
Харьков

Perbedaan antara kata kunci ini dan kata kunci super di Java

Dipublikasikan di grup Random-ID
thisdan supermerupakan dua kata kunci khusus di Java yang masing-masing mewakili instance kelas dan superkelasnya saat ini. Pemrogram Java sering mengacaukan kata-kata ini dan kurang menyadari sifat khususnya, yang sering ditanyakan dalam wawancara Java Core. Misalnya, beberapa pertanyaan yang langsung terlintas di benak Anda adalah tentang thisdan super, Apakah mungkin untuk memberikan arti yang berbeda pada kata kunci thisdi Java? dan apa perbedaan kata kunci thisdengan superdi jawa. Tidak tahu? Ya, saya tidak memberikan jawabannya di sini - jawabannya bisa ditemukan di akhir artikel. Perbedaan antara kata kunci ini dan kata kunci super di Java - 1Jadi, seperti yang saya katakan di awal, perbedaan utama antara thisdan superdi Java adalah thisinstance kelas saat ini mewakili, sedangkan superinstance kelas induk saat ini mewakili. Berikut adalah salah satu contoh penggunaan variabel thisdan super- Anda mungkin pernah melihat contoh pemanggilan konstruktor satu sama lain, yang disebut. memanggil konstruktor dalam suatu rantai, hal ini dimungkinkan melalui penggunaan kata kunci thisdan super. Di dalam suatu kelas, untuk memanggil konstruktor tanpa argumennya, digunakan this(), sedangkan super()digunakan untuk memanggil konstruktor tanpa argumen, atau disebut juga, konstruktor default dari kelas induk. Omong-omong, dengan cara ini Anda tidak hanya dapat memanggil konstruktor tanpa argumen, tetapi juga konstruktor lainnya dengan meneruskan parameter yang sesuai ke dalamnya. Kita akan segera melihat contoh thispenggunaan ini super. Juga di thisJava supermereka digunakan untuk mengakses variabel instance kelas dan induknya. Faktanya, mereka dapat diakses tanpa awalan superdan this, tetapi hanya jika di blok saat ini variabel tersebut tidak tumpang tindih dengan variabel lain, mis. jika tidak mengandung variabel lokal dengan nama yang sama, jika tidak, Anda harus menggunakan nama dengan awalan, tetapi ini tidak masalah, karena dalam bentuk ini mereka bahkan lebih mudah dibaca. Contoh klasik dari pendekatan ini adalah dengan menggunakan thiskonstruktor di dalamnya yang mengambil parameter dengan nama yang sama dengan variabel instan. Nanti di artikel ini kita akan mengetahui perbedaan apa saja antara superdan this, dan melihat beberapa contoh penggunaannya.

Bagaimana ini dan super mirip

Sebelum melihat perbedaan antara kata kunci thisdan super, mari kita lihat beberapa persamaannya:
  1. Keduanya this, dan supermerupakan variabel non-statis, sehingga tidak dapat digunakan dalam konteks statis, yang berarti tidak dapat digunakan dalam metode utama. Hal ini akan mengakibatkan kesalahan waktu kompilasi "variabel non-statis thistidak dapat direferensikan dari konteks statis". Hal yang sama terjadi jika Anda menggunakan kata kunci dalam metode utama super.

  2. Keduanya this, dan superdapat digunakan di dalam konstruktor untuk memanggil konstruktor lain dalam suatu rantai, misalnya, this() dan super() masing-masing memanggil konstruktor tanpa argumen dari kelas pewaris dan kelas induk.
Pada contoh di bawah, pertama-tama kita meneruskan panggilan dari konstruktor tanpa argumen kelas B ke konstruktor kelas B yang sama yang mengambil parameter tunggal bertipe String, yang kemudian super("")memanggil konstruktor satu argumen dari superkelas.
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: Konstruktor satu argumen kelas A Konstruktor satu argumen kelas B Konstruktor tanpa argumen kelas B
  1. Di dalam konstruktor this, dan superharus muncul di atas semua ekspresi lainnya, di awal, jika tidak, kompiler akan mengeluarkan pesan kesalahan. Oleh karena itu, satu konstruktor tidak dapat memuat keduanya this(), dan super().

Perbedaan antara super dan ini

Sekarang kami mengetahui cara menggunakan kata kunci superdan thismemahami mengapa kata kunci tersebut diperlukan. Tetapi ada opsi lain untuk menggunakan kata kunci ini yang tidak saya sebutkan - di kelas Dalam, di mana sangat mudah untuk menggunakannya untuk merujuk ke kelas luar menggunakan bentuk notasi Luar. thisuntuk contoh saat ini dan Luar. super- untuk orang tuanya. Jangan lupa ganti Outer dengan nama kelas luarnya. Sekarang mari kita daftar secara singkat perbedaan utama antara kata kunci thisdansuper
  1. variabel thismengacu pada instance kelas saat ini di mana variabel tersebut digunakan, sedangkan variabel supermerujuk pada instance kelas induk saat ini.

  2. Setiap konstruktor, jika tidak ada panggilan eksplisit ke konstruktor lain, secara implisit memanggil super()konstruktor tanpa argumen dari kelas induknya, namun Anda selalu memiliki opsi untuk memanggil konstruktor lain secara eksplisit dengan this(), atau super().
Mungkin hanya ini yang bisa dikatakan tentang perbedaan antara kata kunci thisdan kata kunci superdi Java dan cara penggunaannya dalam program. Seperti yang telah kita lihat, tujuan utamanya adalah memanggil satu konstruktor dari konstruktor lain dan merujuk ke variabel instan yang dideklarasikan di kelas saat ini dan kelas induknya. Jangan lupa bahwa ini bukan variabel biasa, dan sekarang - jawaban atas pertanyaan saya, yang saya tanyakan di paragraf pertama. Tidak, suatu variabel thistidak dapat diberi nilai baru karena sudah dinyatakan final. Anda dapat mencoba melakukan ini di IDE - Anda akan menerima kesalahan kompilasi "Anda tidak dapat menetapkan nilai baru ke variabel this- variabel tersebut dinyatakan final." Artikel asli di sini .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION