Di Jawa, ada empat pengubah akses yang tersedia untuk metode:
public
- kelas apa pun dapat menggunakan metode ini.
protected
- kelas dalam paket yang sama dan subclass dalam paket apa pun dapat menggunakan metode ini.
private
- hanya kelas ini yang bisa menggunakan metode ini.
no modifier
("paket pribadi") - hanya kelas dalam paket yang sama yang dapat menggunakan metode ini.
Yang sering terjadi adalah saya ingin memiliki metode yang berguna dalam superclass, yang dapat digunakan semua subclass. Tetapi tidak masuk akal bagi kelas lain untuk mengakses metode ini, dan dalam arti itu akan memecah enkapsulasi.
Jadi saya harus mendeklarasikan metode yang berguna ini di superclass public
atau protected
, yang memaparkannya ke semua kelas lain setidaknya dalam paket. Meskipun mereka hanya dimaksudkan untuk digunakan oleh subclass.
Apakah ada alasan mengapa tidak ada subclasses-only
pengubah akses di Java? Sepertinya sangat aneh bagi saya. Apakah saya melewatkan sesuatu?
Juga, subclasses-only
pengubah akses juga akan berguna ketika Anda ingin mengekspos variabel hanya ke subclass. Yang menurut saya sering terjadi.
sumber
Java awalnya memiliki pengubah seperti itu. Itu ditulis
private protected
tetapi dihapus di Jawa 1.0.Saya berasumsi itu adalah panggilan penilaian bahwa kompleksitas tambahan tidak sebanding dengan biayanya.
Setiap fitur bahasa memiliki biaya: dalam mengajarkannya kepada programmer baru; dalam dokumentasi; dalam mengimplementasikannya di compiler, JVM, dan alat dev; dalam penalaran tentang kebenaran program; dalam membatasi evolusi bahasa di masa depan; dan lainnya. Fitur bahasa berinteraksi satu sama lain, berpotensi dengan interaksi N 2 .
Berapa persen programmer Java yang membaca spesifikasi bahasa Jawa dan spesifikasi VM? Saya yakin itu persentase kecil, yang berpendapat untuk bahasa yang lebih sederhana demi pemahaman dan rekayasa produk yang bisa kita andalkan
Keuntungan dari
private protected
fitur ini kecil karena paket adalah unit utama dari modularitas.sumber
Kontrol akses dapat dianggap sebagai hasil dari peliputan dengan pengembang imajiner yang bekerja dengan kelas Anda tentang metode dan properti kelas ...
Ini publik ...
Ini pribadi ...
Ini dilindungi ...
Ini paket.
Ini dilindungi pribadi ...
sumber
Ini sudah ada. Itu dilindungi.
Anda memiliki kontrol atas kelas apa yang ada dalam paket. Jika tidak ada kelas lain dalam paket dan variabel atau metode yang diberikan dilindungi, itu adalah 'hanya subkelas'.
Yang mengatakan, sekali lagi, Anda memiliki kendali atas kelas apa yang ada dalam paket. Anda dapat memilih untuk tidak menggunakan metode atau variabel yang dilindungi.
sumber