Rumah >Java >javaTutorial >Bolehkah Subkelas dalam Pakej Berbeza Mengakses Terus Ahli Dilindungi Superclass?
Memahami Akses Terlindung dalam Java
Di Java, pengubah yang dilindungi bertujuan untuk membenarkan akses kepada ahli tertentu dalam pakej yang sama dan kepada subkelas dalam pakej lain. Walau bagaimanapun, salah tanggapan biasa timbul apabila mengakses ahli yang dilindungi daripada contoh kelas super di luar subkelas.
Pertimbangkan contoh berikut:
// Class A package package1; public class A { protected int protectedInt = 1; } // Class C package package2; import package1.A; public class C extends A { public void go() { A a = new A(); System.out.println(a.publicInt); System.out.println(a.protectedInt); // Eclipse underlines this line } }
Eclipse menimbulkan ralat pada baris di mana a. protectedInt diakses, mendakwa ia tidak kelihatan. Ini nampaknya bercanggah dengan takrif protected dalam Java: "Pengubah suai yang dilindungi menyatakan bahawa ahli hanya boleh diakses dalam pakejnya sendiri (seperti pakej-peribadi) dan, sebagai tambahan, oleh subkelas kelasnya dalam pakej lain."
Menyelesaikan Salah Tanggapan
Kunci untuk memahami tingkah laku ini terletak pada takrifan dilindungi, kerana ia hanya terpakai kepada subkelas. Khususnya, mengakses ahli yang dilindungi dibenarkan hanya dalam badan subkelas.
Oleh itu, ahli dilindungi protectedInt boleh diakses dari dalam Kelas C, tetapi hanya untuk contoh Kelas C itu sendiri atau kejadian subkelas Kelas C . Ia tidak boleh diakses terus daripada contoh kelas super, walaupun ia berada dalam pakej yang sama.
Untuk menyelesaikan ralat dalam kaedah pergi, anda perlu membuat contoh Kelas C dan bukannya Kelas A:
C c = new C(); System.out.println(c.publicInt); System.out.println(c.protectedInt);
Ini akan mengakses ahli yang dilindungi dengan betul melalui tika subkelas.
Atas ialah kandungan terperinci Bolehkah Subkelas dalam Pakej Berbeza Mengakses Terus Ahli Dilindungi Superclass?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!