Rumah > Java > javaTutorial > Bolehkah Subkelas Java Mengatasi Pembolehubah Ahli, atau Adakah Mereka Hanya Menyembunyikan Mereka?

Bolehkah Subkelas Java Mengatasi Pembolehubah Ahli, atau Adakah Mereka Hanya Menyembunyikan Mereka?

Patricia Arquette
Lepaskan: 2024-12-19 22:15:09
asal
564 orang telah melayarinya

Can Java Subclasses Override Member Variables, or Do They Just Hide Them?

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"
    }
}
Salin selepas log masuk

Outputnya ialah:

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

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

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!

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