Saya telah melihat beberapa referensi merujuk ke pengubah akses di Java disebut private protected
(kedua kata bersama):
private protected someMethod() {
}
Salah satu halaman yang saya temukan merujuk ke sini . Pelajaran sekolah saya juga merujuk pada pengubah akses ini (dan mengatakan itu ada). Namun, menggunakannya menghasilkan kesalahan dalam bahasa Java.
Saya mencoba dengan kedua variabel dan metode dan saya cukup yakin itu tidak ada, tetapi saya ingin penjelasan tentang apa yang terjadi. Apakah itu dianggap, lalu ditolak? Atau apakah itu bisa dihapus di versi Java yang lebih baru?
Sunting: Saya tidak mencari info tentang protected
kata kunci.
private protected
pengubah gabungan di sana.private protected
dalam jawaban itu, tapi itu tidak menjelaskan mengapa atau apa yang terjadi padanya, yang menjadi tujuan pertanyaan ini.Jawaban:
Penghapusan pengubah akses
Java memang memiliki
private protected
modifier, tetapi telah dihapus di JDK 1.0.2 ( versi stabil pertama , Java 1.0 yang kita kenal sekarang). Beberapa tutorial tentang JDK 1.0.2 (di sini dan di sini ) mengatakan hal berikut:Jawaban lain tentang SoftwareEngineering.SE menyatakan:
Sekarang lihat Sejarah Versi Java :
Dari ini, kita dapat menyimpulkan tutorial tentang versi 1.0.2 merujuk ke versi pertama, JDK 1.0, di mana bahasa itu disebut Oak, tetapi yang dari SoftwareEngineering.SE merujuk ke versi stabil pertama, JDK 1.0.2 disebut Java 1.0, tempat dihapus.
Sekarang jika Anda mencoba mencarinya di dokumentasi Java 1.0 , Anda tidak akan menemukannya, karena seperti yang disebutkan sebelumnya, itu telah dihapus di JDK 1.0.2, atau dikenal sebagai Java 1.0. Ini terbukti lagi ketika Anda melihat waktu "Terakhir Dimodifikasi" untuk tautan yang Anda poskan. Tautan yang Anda poskan terakhir kali dimodifikasi pada bulan Februari 1996. Java 1.0 / JDK 1.0.2, ketika
private protected
dihapus, dirilis setelah Februari 1996 , dan sesuai dengan spesifikasi, Agustus 1996.Alasan untuk dihapus
Beberapa sumber juga menjelaskan alasannya
private protected
, seperti ini . Kutipan:Dan SoftwareEngineering.SE juga mendukung ini, dengan mengatakan bahwa itu tidak sebanding dengan ketidakkonsistenan dan kompleksitas tambahan, jadi sudah dihapus sejak dini.
Penafsiran
Penafsiran saya tentang semua ini adalah bahwa mungkin, pada masa Oak, keduanya diizinkan untuk hidup berdampingan (karenanya kombinasinya). Karena
protected
makna telah berubah 1 , mungkin ada kebutuhan untuk mengizinkanprivate
danprotected
pada saat yang sama. Pendahuluan menjadi terlalu rumit dan tidak layak, dan akhirnya dibatalkan. Pada saat Java 1.0 / JDK 1.0.2 bergulir, itu telah jatuh dan dengan demikian tidak dapat ditemukan dalam dokumentasi.1 Dalam Spesifikasi Bahasa Oak , Bagian 4.10, Akses ke Variabel dan Metode , perlu dicatat bahwa pengubah default adalah
protected
:Ini sangat berbeda dari apa yang kita miliki hari ini, akses paket default. Ini mungkin telah membuka jalan bagi kebutuhan
private protected
, karenaprivate
terlalu membatasi danprotected
terlalu lunak.sumber
Early on, the Java language allowed for certain combinations of modifiers,
Apakah itu berarti ada lebih dari sekadar "Perlindungan Pribadi?"Ada cerita yang membingungkan / tidak jelas:
Satu, dari sumber Princeton yang Anda masukkan, dan juga dari arsip MIT , menyatakan bahwa:
Tetapi fitur ini tidak ditentukan pada dokumentasi resmi untuk Java 1.0 di sini atau di sini .
Dugaan saya adalah bahwa fitur ini tidak masuk ke versi 1.0 resmi, karena spesifikasi bahasa resmi adalah dari Agustus 1996 dan sumber Princeton terakhir dimodifikasi pada Februari 1996 .
PS: malu pada Oracle karena menghapus arsip untuk versi yang lebih lama.
sumber
Seperti tautan yang Anda berikan dalam pertanyaan Anda menyarankan
private protected
digunakan padaelement/member
kelas, ketika Anda ingin Andasubclass
dapat mengakses elemen tetapi tetap tersembunyi dari kelas lain di dalamnyapackage
.Java
jika dibandingkan denganC++
memiliki konsep tambahan elemen enkapsulasi - dan itu adalah Paket . Orang juga harus memahami apa yang dapat diakses di dalam atau di luar paketJava
ketika datang ke penentu akses sepertiprivate
,public
&protected
.Harap dicatat bahwa saya telah menjelaskan mengapa ini digunakan. Tidak dalam versi saat ini, tentu saja
sumber
Tidak, Anda tidak dapat menggunakan keduanya
private
secaraprotected
bersamaan. Tutorial Anda aneh. Apa yang Anda miliki disebut paket pribadi atau di akses referensi paket terproteksi ot6. Ini adalah akses default yang diaktifkan ketika tidak ada kualifikasi acc6 yang ditulis secara eksplisit.sumber
Ruang lingkup privat menyertai kelas yang ada. Dimana Protected dapat diakses dalam paket dan kelas yang diperluas oleh kelas-kelas dalam paket lain.
Mulus jika Anda ingin variabel / metode Anda menjadi akses di luar paket Anda perlu mendefinisikan sebagai dilindungi / publik jika tidak pribadi atau beberapa penentu akses lainnya.
Metode yang dilindungi biasanya dapat diakses dari paket luar dan dalam sub-kelas, yaitu kelas harus memperluas kelas masing-masing untuk memanfaatkan metode yang didefinisikan dilindungi.
Metode / variabel pribadi memiliki ruang lingkup di dalam kelas. Mereka tidak dapat diakses di luar kelas.
Karenanya Anda tidak dapat mendefinisikan Privat Dilindungi pada saat yang sama!
sumber