this
dan
super
ialah 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
this
dan
super
, Adakah mungkin untuk memberikan makna yang berbeza kepada kata kunci
this
dalam Java? dan apakah perbezaan antara kata kunci
this
dan
super
dalam Java. Tak tahu? Baiklah, saya tidak memberikan jawapan di sini - ia boleh didapati di penghujung artikel.
Jadi, seperti yang saya katakan pada mulanya, perbezaan utama antara
this
dan
super
dalam Java ialah
this
contoh semasa kelas mewakili, manakala
super
contoh semasa kelas induk mewakili. Berikut ialah satu contoh penggunaan pembolehubah
this
dan
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
this
dan
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.
this
Kita akan melihat contoh penggunaan ini tidak lama lagi
super
. Juga di
this
Java
super
mereka digunakan untuk mengakses pembolehubah contoh kelas dan induknya. Malah, ia boleh diakses tanpa awalan
super
dan
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
this
pembina 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
super
dan
this
, dan melihat beberapa contoh penggunaannya.
Bagaimana ini dan super adalah serupa
Sebelum melihat perbezaan antara kata kunci
this
dan
super
, mari kita lihat beberapa persamaannya:
- Kedua-duanya
this
, dan super
pembolehubah 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 this
tidak boleh dirujuk daripada konteks statik". Perkara yang sama berlaku jika anda menggunakan kata kunci dalam kaedah utama super
.
- Kedua-duanya
this
, dan super
boleh 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("");
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: Pembina satu hujah kelas A Pembina satu hujah kelas B Pembina tiada hujah kelas B
- Di dalam constructor
this
, dan super
mesti 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
super
dan
this
memahami 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.
this
untuk 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
this
dan
super
- pembolehubah
this
merujuk kepada contoh semasa kelas di mana ia digunakan, manakala ia super
merujuk kepada contoh semasa kelas induk.
- 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
this
dan
super
dalam 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
this
tidak 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 .
GO TO FULL VERSION