Saya agak bingung dengan istilah "paket pribadi" yang digunakan beberapa dokumentasi, bersama dengan penggunaan "akses default". Bukankah akses paket-pribadi dan default sama-sama identik dengan dilindungi?
java
terminology
protected
access-modifiers
package-private
TurtleToes
sumber
sumber
default
pengubah di depan metode (antarmuka). Tapi itu bukan pengubah akses! Semua pengubah akses dan cakupannya divisualisasikan dengan jelas dalam tabel ini .Jawaban:
Ya, hampir sama. Modifier yang dilindungi menetapkan bahwa anggota hanya dapat diakses di dalam paketnya sendiri (seperti paket-private) dan, sebagai tambahan , oleh subkelas kelasnya di paket lain.
sumber
public static final
, untuk metode adalahpublic abstract
, untuk enum atau anotasi adalahpublic
dan untuk kelas itupublic static
Pengubah akses "default" (yang tidak secara eksplisit diberikan) adalah "package-private", yang berarti hanya hal-hal dalam paket yang sama yang dapat mengaksesnya. Namun, berada dalam paket yang sama tidak menyiratkan apa pun tentang hubungan pewarisan antar kelas - ini murni konvensi penamaan.
"Dilindungi" berarti bahwa tidak hanya kelas dalam paket yang sama, tetapi juga subkelas (terlepas dari paket mana subkelas itu berada) akan dapat mengaksesnya.
sumber
Akses default untuk kelas adalah paket-privat, namun akses default untuk antarmuka anggota adalah publik.
misalnya
Aturan akses default untuk antarmuka tidak sama dengan kelas.
sumber
Akses paket-pribadi dan default adalah sinonim. Sebuah objek juga dapat mengakses anggota yang dilindungi dari objek yang kelasnya berada dalam paket yang sama. Sebuah objek juga dapat mengakses anggota superkelasnya yang dilindungi tanpa kondisi tentang paketnya. Sebagai contoh konkret:
sumber
'Paket pribadi' dan akses defaultnya sama. Pada rilis awal kompilator sekitar 1.1.2 / 3, 'package' adalah pengubah yang diizinkan, tetapi diabaikan, artinya sama dengan tanpa pengubah, yaitu 'package private'. Tak lama kemudian, ada cara yang berumur pendek untuk menempatkan
/*package*/
(sebagai komentar) dalam situasi seperti itu. Demikian pula pada saat itu Anda dapat mendeklarasikan hal-hal seperti kelas tersinkronisasi, meskipun sekali lagi tidak ada efek semantik yang sebenarnya.Tak satu pun dari mereka adalah sama dengan 'dilindungi', yang meluas ke kelas turunan dalam paket lain.
sumber
Dari Spesifikasi Bahasa Java
sumber
default dan package-private keduanya sama, yang berarti keduanya dapat digunakan oleh semua kelas sampai keduanya berada dalam paket yang sama.
Istilah paket-privat , sebenarnya, diistilahkan dengan arti pengubah privat sebagai privat artinya ini hanya tersedia di kelas yang sama dan tidak ada kelas atau subkelas lain yang dapat mengaksesnya dalam paket yang sama atau tanpa.
Karenanya paket-pribadi berarti sama dengan default .
sumber