Rumah >Java >javaTutorial >Mengapakah Subkelas Java Saya Mencetak Pembolehubah Statik Kelas Induk dan bukannya Sendiri?

Mengapakah Subkelas Java Saya Mencetak Pembolehubah Statik Kelas Induk dan bukannya Sendiri?

Barbara Streisand
Barbara Streisandasal
2024-12-01 06:05:20777semak imbas

Why Does My Java Subclass Print the Parent Class's Static Variable Instead of Its Own?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn