Rumah > Java > javaTutorial > Mengapa Penyembunyian Pembolehubah Berlaku Apabila Mengatasi Pembolehubah Ahli di Java?

Mengapa Penyembunyian Pembolehubah Berlaku Apabila Mengatasi Pembolehubah Ahli di Java?

Linda Hamilton
Lepaskan: 2024-12-20 20:02:10
asal
336 orang telah melayarinya

Why Does Variable Hiding Occur When Overriding Member Variables in Java?

Mendedahkan Nuansa Penyembunyian Pembolehubah dalam Java

Semasa meneroka konsep mengatasi fungsi ahli di Java, anda telah mencuba mencuba pembolehubah ahli mengatasi. Untuk itu, anda mencipta struktur kelas berikut:

class A {
    public int intVal = 1;
}

class B extends A {
    public int intVal = 2;
}

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();
    }
}
Salin selepas log masuk

Melaksanakan kod ini menghasilkan output berikut:

1
I am class A
1
I am class B
Salin selepas log masuk

Anda menyatakan kekeliruan mengapa aRef.intVal kekal 1 walaupun selepas menjadi diberikan kepada contoh kelas B. Untuk merungkai misteri ini, fahami bahawa dalam senario yang anda bentangkan, anda berhadapan dengan penyembunyian berubah-ubah bukannya mengatasi.

Di Java, anda boleh mempunyai pembolehubah dengan nama yang sama dalam superclass dan subclass. Teknik menyembunyikan pembolehubah ini secara berkesan menyembunyikan pembolehubah superclass. Walau bagaimanapun, kedua-dua pembolehubah terus wujud secara bebas dalam kelas masing-masing.

Apabila anda mengakses pembolehubah daripada rujukan superclass, anda berinteraksi dengan pembolehubah superclass. Rujukan itu sendiri tidak dipengaruhi oleh kelas objek yang ditunjukkannya. Oleh itu, walaupun aRef menunjuk kepada contoh kelas B, ia mengakses pembolehubah intVal daripada kelas A kerana itulah kelas yang dimiliki oleh aRef.

Untuk mengakses pembolehubah intVal daripada subkelas (B), anda boleh menggunakan kata kunci super, yang merujuk kepada superclass. Pendekatan ini membolehkan anda membezakan antara pembolehubah dengan nama yang sama dalam superclass dan subclass, dengan itu menyelesaikan sebarang kekaburan.

Atas ialah kandungan terperinci Mengapa Penyembunyian Pembolehubah Berlaku Apabila Mengatasi Pembolehubah Ahli di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan