Pengubah Akses Java 'peribadi'

1. Gambaran keseluruhan

Dalam bahasa pengaturcaraan Java, bidang, konstruktor, kaedah, dan kelas dapat ditandai dengan pengubah akses. Dalam tutorial ini, kita akan membincangkan pengubah akses peribadi di Java.

2. Kata Kunci

The swasta akses pengubahsuai adalah penting kerana ia membolehkan pengkapsulan dan maklumat bersembunyi, yang prinsip teras pengaturcaraan berorientasikan objek. Encapsulation bertanggung jawab untuk menggabungkan kaedah dan data, sementara penyembunyian maklumat adalah akibat dari enkapsulasi - ia menyembunyikan representasi dalaman objek.

Perkara pertama yang perlu diingat ialah elemen yang dinyatakan sebagai peribadi hanya dapat diakses oleh kelas di mana mereka dinyatakan .

3. Padang

Sekarang, kita akan melihat beberapa contoh kod mudah untuk memahami subjek dengan lebih baik.

Pertama, mari buat kelas Pekerja yang mengandungi beberapa pemboleh ubah contoh peribadi :

public class Employee { private String privateId; private boolean manager; //... }

Dalam contoh ini, kami menandakan pemboleh ubah privateId sebagai peribadi kerana kami ingin menambahkan beberapa logik ke generasi id. Dan, seperti yang kita lihat, kita melakukan perkara yang sama dengan atribut pengurus kerana kita tidak mahu membenarkan pengubahsuaian langsung bidang ini.

4. Pembina

Sekarang mari kita buat pembina peribadi :

private Employee(String id, String name, boolean managerAttribute) { this.name = name; this.privateId = id + "_ID-MANAGER"; }

Dengan menandakan pembina kita sebagai peribadi , kita boleh menggunakannya hanya dari dalam kelas kita.

Mari tambahkan kaedah statik yang akan menjadi satu-satunya cara untuk menggunakan pembina peribadi ini dari luar kelas Pekerja :

public static Employee buildManager(String id, String name) { return new Employee(id, name, true); }

Sekarang kita boleh mendapatkan contoh pengurus kelas Karyawan kita dengan menulis:

Employee manager = Employee.buildManager("123MAN","Bob");

Sudah tentu, di sebalik tabir, kaedah buildManager memanggil pembina peribadi kami .

5. Kaedah

Mari sekarang tambahkan kaedah peribadi ke kelas kami:

private void setManager(boolean manager) { this.manager = manager; }

Dan anggaplah, atas sebab tertentu, kita mempunyai peraturan sewenang-wenangnya di syarikat kita di mana hanya seorang pekerja bernama "Carl" yang boleh dinaikkan pangkat menjadi pengurus, walaupun kelas lain tidak mengetahui perkara ini. Kami akan membuat kaedah awam dengan logik untuk menangani peraturan ini yang memanggil kaedah peribadi kami :

public void elevateToManager() { if ("Carl".equals(this.name)) { setManager(true); } }

6. peribadi dalam Tindakan

Mari lihat contoh cara menggunakan kelas Pekerja kami dari luar:

public class ExampleClass { public static void main(String[] args) { Employee employee = new Employee("Bob","ABC123"); employee.setPrivateId("BCD234"); System.out.println(employee.getPrivateId()); } }

Setelah melaksanakan ContohClass , kita akan melihat outputnya di konsol:

BCD234_ID

Dalam contoh ini, kami menggunakan konstruktor awam dan kaedah perubahanId awam (customId) kerana kami tidak dapat mengakses pemboleh ubah peribadi privateId secara langsung.

Mari kita lihat apa yang berlaku jika kita cuba untuk mengakses swasta kaedah, pembina, atau berubah-ubah dari luar kami pekerja kelas:

public class ExampleClass { public static void main(String[] args) { Employee employee = new Employee("Bob","ABC123",true); employee.setManager(true); employee.privateId = "ABC234"; } }

Kami akan mendapat kesilapan penyusunan untuk setiap pernyataan haram kami:

The constructor Employee(String, String, boolean) is not visible The method setManager(boolean) from the type Employee is not visible The field Employee.privateId is not visible

7. Kelas

Terdapat satu kes khas di mana kita boleh membuat kelas peribadi - sebagai kelas dalaman beberapa kelas lain. Jika tidak, jika kita mengisytiharkan kelas luar sebagai peribadi , kita melarang kelas lain mengaksesnya, menjadikannya tidak berguna:

public class PublicOuterClass { public PrivateInnerClass getInnerClassInstance() { PrivateInnerClass myPrivateClassInstance = this.new PrivateInnerClass(); myPrivateClassInstance.id = "ID1"; myPrivateClassInstance.name = "Bob"; return myPrivateClassInstance; } private class PrivateInnerClass { public String name; public String id; } }

Dalam contoh ini, kami membuat kelas dalaman peribadi di dalam PublicOuterClass kami dengan menentukan pengubah akses peribadi .

Oleh kerana kami menggunakan kata kunci peribadi , jika kami, atas sebab tertentu, cuba memberi contoh PrivateInnerClass kami dari luar PublicOuterClass , kod tersebut tidak akan menyusun dan kami akan melihat ralatnya:

PrivateInnerClass cannot be resolved to a type

8. Kesimpulannya

Dalam tutorial ringkas ini, kami telah membincangkan pengubah akses peribadi di Java. Ini adalah kaedah yang baik untuk mencapai enkapsulasi, yang membawa kepada penyembunyian maklumat. Hasilnya, kami dapat memastikan bahawa kami hanya mendedahkan data dan tingkah laku yang kami mahukan kepada kelas lain.

Seperti biasa, contoh kod boleh didapati di GitHub.