Rumah >Java >javaTutorial >Mengapakah Subkelas Java Saya Mencetak Pembolehubah Statik Kelas Induk dan bukannya Sendiri?
Overriding Class Variable in Java: A Hidden Mystery
Soalan timbul daripada coretan kod menarik yang berkisar pada hierarki kelas, khususnya di sekitar kelas ibu bapa bernama Ayah dan kelas anaknya, Anak. Kedua-dua kelas mempunyai pembolehubah kelas bernama saya, bertujuan untuk mewakili identiti mereka. Walau bagaimanapun, isu timbul apabila kaedah doIt(), yang membuat instantiate objek Son dan memanggil kaedah printMe()nya, mencetak "ayah" dan bukannya "anak" yang dijangkakan.
Bolehkah Pembolehubah Kelas Menjadi Ditindih?
Untuk menjawabnya, kami menyelidiki konsep pewarisan dan penggantian di Jawa. Overriding merujuk kepada keupayaan subkelas untuk mengubah suai tingkah laku kaedah yang ditakrifkan dalam superclassnya. Walau bagaimanapun, konsep ini tidak meluas kepada pembolehubah kelas.
Menyembunyikan lwn. Mengatasi
Dalam kes pembolehubah kelas, apa yang berlaku bukanlah mengatasi tetapi sebaliknya "menyembunyikan. " Apabila subkelas mengisytiharkan pembolehubah kelas dengan nama yang sama seperti dalam kelas supernya, ia menyembunyikan pembolehubah yang diwarisi dan bukannya menggantikannya. Pembolehubah tersembunyi secara berkesan ditutup daripada paparan dalam subkelas.
Nilai Tersembunyi
Berbalik kepada contoh, pengisytiharan saya dalam Son menyembunyikan pembolehubah saya yang diwarisi daripada Ayah. Walau bagaimanapun, pembolehubah tersembunyi dalam Ayah mengekalkan nilainya, "ayah," dan merupakan salah satu yang diakses dan dicetak dalam kaedah printMe().
Penyelesaian Alternatif
Untuk mencapai hasil yang diinginkan untuk mencetak "anak", pendekatan alternatif ialah menggunakan pembolehubah contoh (pembolehubah bukan statik) yang ditakrifkan dalam pembina kelas kanak-kanak. Kaedah ini membenarkan subkelas mempunyai identiti tersendiri tanpa menjejaskan pembolehubah kelas kelas supernya.
Kesimpulan
Pada dasarnya, tiada mekanisme langsung untuk mengatasi kelas pembolehubah dalam Java. Hubungan antara subkelas dan superclassnya melibatkan penyembunyian dan pewarisan, membolehkan subkelas mempunyai ciri uniknya sendiri tanpa mengubah suai nilai asal kelas induk. Dalam kes di mana identiti berbeza dikehendaki, menggunakan pembolehubah contoh menawarkan penyelesaian yang lebih sesuai.
Atas ialah kandungan terperinci Mengapakah Subkelas Java Saya Mencetak Pembolehubah Statik Kelas Induk dan bukannya Sendiri?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!