Mengapa mekanisme kontrol akses dirancang di Java? Ada dua fungsi utama:
(1) Agar pengguna menghindari menyentuh bagian yang tidak boleh mereka sentuh, bagian -bagian ini diperlukan untuk operasi internal, tetapi mereka bukan bagian dari antarmuka yang diperlukan oleh programmer klien.
(2) Untuk memungkinkan perancang perpustakaan kelas mengubah kerja internal kelas tanpa khawatir memiliki dampak yang signifikan pada pengguna.
Tingkat kontrol izin akses di Java adalah:
Publik -> Dilindungi -> Akses Paket (tidak ada pengubah izin) -> Private.
1. Paket
Konsep paket di Java sangat mirip dengan konsep namespaces di C ++, dan keduanya dapat membatasi ruang lingkup kelas. Perbedaan terbesar antara keduanya adalah bahwa paket di Java secara implisit menunjukkan hierarki pohon kelas (dan juga struktur direktori file kode sumber Java). Keuntungan dari ini adalah bahwa keunikan kelas dapat dibatasi oleh persyaratan untuk keunikan jalur file dalam sistem file.
1. Organisasi Kode
Saat menulis file kode sumber Java (file .java), file ini biasanya disebut unit kompilasi. Paling banyak satu kelas publik diizinkan di unit kompilasi, dan nama kelas harus persis sama dengan nama file (termasuk huruf besar dan kecil).
Saat menyusun file .java, setiap kelas dalam file .java akan memiliki file output .class, dan nama file dan nama kelasnya sama. Program Java Runnable adalah satu set file .class yang dapat dikemas dan dikompres ke dalam file dokumen Java (paket jar, menggunakan Java's Jar Document Generator). Interpreter Java bertanggung jawab atas pencarian, pemuatan, dan interpretasi file -file ini.
Perpustakaan kelas sebenarnya adalah satu set file kelas. Setiap file .java diizinkan untuk memiliki paling banyak satu kelas publik, serta sejumlah kelas non-publik. Oleh karena itu, setiap file memiliki artefak. Jika Anda ingin mengatur komponen -komponen ini (masing -masing bangunan memiliki file .java dan beberapa file .class) untuk membentuk grup yang berbeda, Anda dapat menggunakan paket kata kunci di Java.
2. Fungsi paket
(1) mengatur kelas atau antarmuka dengan fungsi yang serupa atau terkait dalam paket yang sama untuk memfasilitasi pencarian dan penggunaan kelas.
(2) Seperti folder, paket juga menggunakan direktori berbentuk pohon untuk menyimpannya. Nama kelas dalam paket yang sama berbeda, dan nama -nama kelas dalam paket yang berbeda bisa sama. Ketika kelas dengan nama kelas yang sama dalam dua paket berbeda dipanggil pada saat yang sama, nama paket harus ditambahkan untuk membedakannya. Oleh karena itu, paket dapat menghindari konflik nama.
(3) Paket juga membatasi hak akses. Hanya kelas dengan hak akses paket yang dapat mengakses kelas dalam suatu paket.
3. Buat paket
Di Java, gunakan kata kunci paket untuk menentukan paket (namespace) yang menjadi milik kode.
Format Sintaks:
paket pkg1 [. pkg2 [. pkg3…]];
Catatan:
(1) Nama paket secara implisit menunjukkan struktur direktori kode.
(2) Nama kelas publik (juga nama file Java) di direktori yang sama harus unik.
(3) Deklarasi paket harus berada di baris pertama file sumber. Setiap file sumber hanya dapat memiliki satu deklarasi paket, dan setiap jenis dalam file ini diterapkan padanya.
(4) Jika file sumber tidak menggunakan deklarasi paket, maka kelas, fungsi, enum, komentar, dll. Di dalamnya akan ditempatkan dalam paket yang tidak disebutkan namanya.
(5) Nama -nama paket umumnya dalam huruf kecil.
Misalnya:
Periksa kode sumber kelas java.util.arraylist dan Anda dapat melihat bahwa baris pertama file adalah:
paket java.util;
Struktur Direktori Kode adalah Java/Util/ArrayList.java
4. Paket Impor
Di Java, gunakan kata kunci impor untuk mengimpor paket.
Format Sintaks:
impor paket1 [.package2…]. (ClassName |*);
contoh:
Mari kita ambil java.util.arraylist sebagai contoh. Sangat tidak nyaman menggunakannya dengan cara yang memiliki jalur kelas penuh.
java.util.arraylist <string> list = new java.util.arraylist <string> ();
Jika Anda ingin menghilangkan jalur sebelumnya, Anda dapat menggunakan kata kunci impor.
impor java.util.arraylist;
Setelah mengimpor paket dalam file, kode sebelumnya yang menyatakan daftar dapat disederhanakan sebagai berikut:
ArrayList <String> list = ArrayList baru <string> ();
2. Pengubah Hak Akses
1. Paket: Izin Akses Paket
Jika tidak ada pengubah akses yang disediakan, itu berarti itu adalah akses paket.
Akses default tidak memiliki kata kunci, tetapi biasanya mengacu pada akses paket (kadang -kadang juga dinyatakan sebagai ramah, sedikit seperti konsep elemen teman di C ++). Ini berarti bahwa semua kelas lain dalam paket dapat mengakses anggota atau metode ini, tetapi semua kelas di luar paket ini tidak dapat diakses.
contoh:
com.notes.packages.test.info
paket com.notes.packages.test; info publicclass {void print () {System.out.println ("Metode default - print ()"); }}com.notes.packages.test.publicdemo01
Paket com.notes.packages.test; publicclass publicDemo01 {publicstaticvoid main (string [] args) {info x = info baru (); x.print (); }}PublicDemo01 dan info dapat mengakses metode info tingkat default - print () di bawah paket yang sama.
com.notes.packages.publicdemo02
Paket com.notes.packages; import com.notes.packages.test.info; publicclass publicDemo02 {publicstaticvoid main (string [] args) {info x = info baru (); // x.print (); // kesalahan}}PublicDemo02 dan info tidak ada dalam paket yang sama, dan metode tingkat izin akses paket info tidak dapat diakses - print ().
2. Publik: Izin Akses Antarmuka
Menggunakan kata kunci publik berarti bahwa anggota atau metode yang dinyatakan dapat diakses oleh semua orang.
Contoh: Jika metode cetak () izin dalam contoh izin tingkat default diatur ke publik, publicDemo02 dapat diakses.
paket com.notes.packages.test; info publicclass {publicVoid print () {System.out.println ("Metode publik - print ()"); }}3. Pribadi: Tidak dapat mengakses
Menggunakan kata kunci pribadi berarti bahwa anggota atau metode yang dinyatakan tidak dapat diakses oleh kelas lain kecuali kelas ini.
Skenario Aplikasi: Singleton Mode
4. Dilindungi: Izin akses waris
Kelas baru (disebut kelas anak atau kelas turunan) dapat menggunakan kembali kelas yang ada (disebut kelas induk atau kelas dasar) melalui warisan, dan kemudian memperluas anggota dan metode kelas dasar. Terkadang, pencipta kelas dasar akan menginginkan anggota tertentu untuk menetapkan aksesnya ke kelas turunan alih -alih semua kelas. Publik tidak dapat melakukan ini, dan untuk tujuan ini, dilindungi diperkenalkan untuk melakukan pekerjaan itu. Dilindungi juga menyediakan akses paket, yaitu, kelas turunan dan kelas lain dalam paket yang sama dapat mengakses anggota atau metode yang dilindungi.
Contoh: Setelah subkelas mewarisi kelas induk, ia dapat mengakses anggota yang dilindungi dari kelas induk.
Class Father {Private String A = "Private"; string yang dilindungi b = "dilindungi"; string publik c = "publik";}; class son memperluas ayah {publicVoid print () {// system.out.println ("Elemen A:" + super.a); // error system.out.println ("elemen b:" + super.b); System.out.println ("Elemen C:" + Super.c); }} publicclass protectedDemo01 {publicstaticvoid main (string args []) {son sub = new son (); sub.print (); }};Catatan tentang pengubah akses
Dalam contoh sebelumnya, anggota dan metode kelas dapat dimodifikasi dengan berbagai pengubah izin.
Selain itu, ada beberapa poin yang harus diperhatikan:
(1) Penggunaan pengubah izin untuk anggota statis dan metode statis sama dengan anggota dan metode biasa.
(2) Meskipun kelas juga dapat dimodifikasi dengan pengubah, dua kata retoris izin pribadi dan dilindungi tidak dapat digunakan.
(3) Dalam beberapa buku, akses paket juga disebut akses default. Saya pribadi tidak merekomendasikan menghafal dengan cara ini, karena ini mudah dikacaukan dengan fitur baru Java SE8 - kata kunci default. Kata kunci ini hanya dapat digunakan untuk antarmuka, dan fungsinya adalah untuk memungkinkan pemrogram untuk menentukan implementasi default antarmuka dalam antarmuka (di versi JDK sebelumnya tidak mengizinkan ini, Anda hanya dapat mendeklarasikan metode dalam antarmuka).
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.