Apa ruang lingkup default metode di Jawa?

165

Jika saya mengetik:

 void doThis(){
     System.out.println("Hello Stackoverflow.");
 }

apa ruang lingkup standar doThis()?

Publik? Terlindung? Pribadi?

Joe Fontana
sumber

Jawaban:

264

Ruang lingkup default adalah paket-pribadi. Semua kelas dalam paket yang sama dapat mengakses metode / bidang / kelas. Paket-pribadi lebih ketat daripada ruang lingkup yang dilindungi dan publik, tetapi lebih permisif daripada ruang lingkup pribadi.

Informasi lebih lanjut:
http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
http://mindprod.com/jgloss/scope.html

Esko Luontola
sumber
2
"Paket-default lebih ketat dari ..."
reinaldoluckman
7
Mungkin juga layak disebutkan bahwa "paket-pribadi" adalah ruang lingkup yang baik untuk digunakan saat mengekspos metode untuk pengujian unit eksternal.
Gary Rowe
1
Jika ini masalahnya, lalu mengapa perlu membuat sesuatu untuk publik kecuali jika Anda membuat membuat perpustakaan atau apa pun dari mana pengguna akan mendapatkan fungsionalitas untuk kode mereka?
Daniel
2
@ user3858162 Sebagian besar aplikasi non-sepele diatur ke dalam beberapa paket, dalam hal ini ruang lingkup publik diperlukan untuk memanggil metode panggilan dari paket lain.
Esko Luontola
19

Apa pun yang didefinisikan sebagai paket pribadi dapat diakses oleh kelas itu sendiri, kelas lain dalam paket yang sama, tetapi tidak di luar paket, dan bukan oleh sub-kelas.

Lihat halaman ini untuk tabel berguna pengubah tingkat akses ...

pengguna15299
sumber
9

Tanpa pengubah akses, anggota kelas dapat diakses di seluruh paket yang dinyatakannya. Anda dapat belajar lebih banyak dari Spesifikasi Bahasa Jawa, §6.6.

Anggota antarmuka selalu dapat diakses oleh publik, baik secara eksplisit atau tidak.

erickson
sumber
5

Lingkup default adalah "default". Aneh - lihat referensi ini untuk info lebih lanjut.

Michael Haren
sumber
3
Sebenarnya ini bukan: itu paket-pribadi
Maurice Perry
2
Saya tidak dapat menghapus jawaban saya karena sudah diterima. Saya mendorong Joe untuk pergi dengan jawaban @ Esko!
Michael Haren
1
tautan kedua rusak (dan mudah untuk dilewatkan bahwa keduanya adalah dua tautan)
idclev 463035818
1

Java 8 sekarang memungkinkan implementasi metode di dalam antarmuka itu sendiri dengan ruang lingkup default (dan hanya statis).

pisau
sumber