Pembolehubah Menyembunyikan dalam Java
Semasa meneroka fungsi ahli yang mengatasi Java, timbul rasa ingin tahu tentang potensi untuk mengatasi pembolehubah ahli. Untuk menyiasat, 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); // Prints 1 aRef.identifyClass(); // Prints "I am class A" aRef = b; System.out.println(aRef.intVal); // Prints 1 aRef.identifyClass(); // Prints "I am class B" } }
Outputnya ialah:
1 I am class A 1 I am class B
Kod ini memulakan dua kelas, A dan B, kedua-duanya dengan pembolehubah ahli bernama intVal. B melanjutkan A dan mengisytiharkan semula pembolehubah ahli intVal. Apabila pembolehubah rujukan aRef ditetapkan kepada contoh A, pembolehubah ahli intVal diakses dengan betul. Walau bagaimanapun, apabila aRef ditetapkan kepada kejadian B, pembolehubah ahli intVal masih mencetak nilai yang disimpan dalam kelas A.
Mengapa ini berlaku?
Pembolehubah Ahli Menyembunyikan
Dalam situasi ini, pembolehubah ahli intVal dalam kelas B tidak mengatasi pembolehubah ahli intVal dalam kelas A. Sebaliknya, pembolehubah adalah tersembunyi. Apabila pembolehubah disembunyikan, subkelas mengandungi kedua-dua sifat asal daripada superclass dan sifat baharu dengan nama yang sama.
Untuk mengakses pembolehubah ahli asal daripada superclass, anda boleh menggunakan super.var atau (( SuperClass)ini).var sintaks. Contohnya:
// Access the original intVal member variable from the A class System.out.println(aRef.intVal); // Use super to access the original intVal member variable System.out.println(aRef.super.intVal);
Adalah penting untuk ambil perhatian bahawa pembolehubah tersembunyi tidak perlu daripada jenis yang sama. Mereka hanya berkongsi nama yang sama dalam subkelas. Ini membolehkan anda membuat pelaksanaan berbeza bagi sifat yang sama untuk subkelas yang berbeza, memberikan fleksibiliti dan kebolehgunaan semula kod.
Atas ialah kandungan terperinci Bolehkah Subkelas Java Mengatasi Pembolehubah Ahli, atau Adakah Mereka Hanya Menyembunyikan Mereka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!