this
dan
super
merupakan 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
this
dan
super
, Apakah mungkin untuk memberikan arti yang berbeda pada kata kunci
this
di Java? dan apa perbedaan kata kunci
this
dengan
super
di jawa. Tidak tahu? Ya, saya tidak memberikan jawabannya di sini - jawabannya bisa ditemukan di akhir artikel.
Jadi, seperti yang saya katakan di awal, perbedaan utama antara
this
dan
super
di Java adalah
this
instance kelas saat ini mewakili, sedangkan
super
instance kelas induk saat ini mewakili. Berikut adalah salah satu contoh penggunaan variabel
this
dan
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
this
dan
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
this
penggunaan ini
super
. Juga di
this
Java
super
mereka digunakan untuk mengakses variabel instance kelas dan induknya. Faktanya, mereka dapat diakses tanpa awalan
super
dan
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
this
konstruktor di dalamnya yang mengambil parameter dengan nama yang sama dengan variabel instan. Nanti di artikel ini kita akan mengetahui perbedaan apa saja antara
super
dan
this
, dan melihat beberapa contoh penggunaannya.
Bagaimana ini dan super mirip
Sebelum melihat perbedaan antara kata kunci
this
dan
super
, mari kita lihat beberapa persamaannya:
- Keduanya
this
, dan super
merupakan 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 this
tidak dapat direferensikan dari konteks statis". Hal yang sama terjadi jika Anda menggunakan kata kunci dalam metode utama super
.
- Keduanya
this
, dan super
dapat 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("");
System.out.println("Конструктор без аргументов класса B");
}
B(String args){
super("");
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
- Di dalam konstruktor
this
, dan super
harus 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
super
dan
this
memahami 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.
this
untuk 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
this
dan
super
- variabel
this
mengacu pada instance kelas saat ini di mana variabel tersebut digunakan, sedangkan variabel super
merujuk pada instance kelas induk saat ini.
- 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
this
dan kata kunci
super
di 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
this
tidak 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 .
GO TO FULL VERSION