Peningkatan Pembolehubah dalam Java: Penerokaan Lebih Dalam
Mengatasi fungsi ahli di Java ialah konsep yang terkenal. Walau bagaimanapun, bereksperimen dengan pembolehubah ahli mengatasi menimbulkan persoalan. Pertimbangkan kod berikut:
public class A { public int intVal = 1; public void identifyClass() { System.out.println("I am class A"); } } public class B extends A { public int intVal = 2; public void identifyClass() { System.out.println("I am class B"); } } public class MainClass { public static void main(String [] args) { A a = new A(); B b = new B(); A aRef; aRef = a; System.out.println(aRef.intVal); aRef.identifyClass(); aRef = b; System.out.println(aRef.intVal); aRef.identifyClass(); } }
Tingkah laku yang membingungkan terletak pada output:
1 I am class A 1 I am class B
Mengapa intVal masih 1 apabila aRef menunjuk kepada b?
Menyingkap Pembolehubah Menyembunyikan
Bertentangan dengan fungsi mengatasi, pembolehubah mengatasi tidak mungkin. Sebaliknya, Java menggunakan konsep yang dikenali sebagai "penyorok pembolehubah." Apabila pembolehubah dengan nama yang sama diisytiharkan dalam subkelas, ia menutup pembolehubah dalam superclass dalam skop subkelas.
Dalam contoh, kelas B mengisytiharkan intVal = 2. Walaupun ini bertindih dengan pembolehubah dalam kelas A, ia tidak mengatasinya. Kedua-dua pembolehubah wujud bersama dalam objek jenis B.
Mengakses Pembolehubah Kelas Super
Untuk mengakses pembolehubah daripada kelas super, terdapat dua pilihan:
Sebagai contoh, aRef.super.intVal akan mendapatkan 2 , intVal kelas B.
Pembolehubah Bersembunyi dalam Berlatih
Penyorok pembolehubah boleh berguna dalam senario tertentu. Sebagai contoh, anda boleh menentukan kelas asas dengan sifat biasa yang diwarisi oleh semua subkelas dan secara selektif mengatasi sifat tertentu mengikut keperluan. Walau bagaimanapun, adalah penting untuk menggunakan teknik ini dengan bijak untuk mengelakkan kekeliruan dan kemungkinan ralat.
Atas ialah kandungan terperinci Bolehkah Subkelas Java Benar-Benar Mengatasi Pembolehubah Instance, atau Adakah Sesuatu yang Lain sedang dimainkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!