Mengapa Objek Kelas Yang Sama Boleh Mengakses Medan Peribadi Satu Sama Lain?

DDD
Lepaskan: 2024-11-11 06:36:02
asal
1006 orang telah melayarinya

Why Can Objects of the Same Class Access Each Other's Private Fields?

Mengakses Medan Persendirian dalam Kelas Yang Sama: Pilihan Reka Bentuk Membingungkan

Konsep medan persendirian dalam pengaturcaraan berorientasikan objek bertujuan untuk menyekat akses kepada ahli tertentu objek kepada kaedah dalaman objek sahaja. Walau bagaimanapun, anomali timbul dalam senario di mana dua kejadian kelas yang sama boleh mengakses medan peribadi masing-masing. Ini menimbulkan persoalan: Mengapa pengaturcaraan berorientasikan objek direka bentuk untuk membenarkan perlindungan peringkat kelas dan bukannya peringkat objek untuk ahli persendirian?

Pertimbangkan coretan kod berikut:

class Person {
    private BankAccount account;

    Person(BankAccount account) {
        this.account = account;
    }

    public Person someMethod(Person person) {
        // Accessing private field directly
        BankAccount a = person.account;
    }
}
Salin selepas log masuk

Dalam ini kod, fungsi someMethod kelas Orang mempunyai akses terus ke medan akaun contoh lain dalam kelas yang sama. Ini bercanggah dengan prinsip enkapsulasi yang mendasari pengaturcaraan berorientasikan objek.

Menyelidiki pilihan reka bentuk yang kelihatan berlawanan dengan intuisi, beberapa cerapan muncul. Satu penjelasan yang munasabah diperoleh daripada prinsip enkapsulasi itu sendiri. Keterlihatan peribadi bertujuan untuk melindungi keadaan dalaman objek daripada pengubahsuaian luaran. Walau bagaimanapun, apabila dua kejadian kelas yang sama berinteraksi, kedua-dua kejadian itu diandaikan sebagai privy kepada kerja dalaman kelas. Tahap kepercayaan ini menghapuskan keperluan untuk sekatan akses peringkat objek.

Sebab lain terletak pada sifat akses peringkat kelas. Pengubah suai akses peribadi, seperti namanya, memberikan akses hanya dalam kelas. Ini menunjukkan bahawa mana-mana kaedah atau pembina dalam kelas mempunyai akses tanpa had kepada ahli persendirian. Oleh itu, apabila satu objek merujuk objek lain dalam kelas yang sama, akses peringkat kelas digunakan untuk kedua-dua objek, memberikan akses kepada medan peribadi.

Kesimpulannya, manakala keupayaan untuk mengakses medan peribadi objek lain dalam kelas yang sama mungkin kelihatan paradoks, ia berpunca daripada prinsip asas pengkapsulan dan akses peringkat kelas. Pilihan reka bentuk ini membolehkan objek berinteraksi secara bebas dalam lingkungan kelas mereka, memelihara integriti keadaan dalaman sambil memudahkan komunikasi yang cekap.

Atas ialah kandungan terperinci Mengapa Objek Kelas Yang Sama Boleh Mengakses Medan Peribadi Satu Sama Lain?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan