Hanya 2 sen saya pada pertanyaan mengapa semantik visibilitas pribadi di Jawa adalah tingkat kelas daripada tingkat objek.
Saya akan mengatakan bahwa kenyamanan tampaknya menjadi kuncinya di sini. Faktanya, visibilitas pribadi di tingkat objek akan memaksa untuk mengekspos metode ke kelas lain (misalnya dalam paket yang sama) dalam skenario yang diilustrasikan oleh OP.
Sebenarnya saya tidak dapat membuat atau menemukan contoh yang menunjukkan bahwa visibilitas di tingkat kelas-privat (seperti yang ditawarkan oleh Java) menciptakan masalah apa pun jika dibandingkan dengan visibilitas di tingkat objek-pribadi.
Meskipun demikian, bahasa pemrograman dengan sistem kebijakan visibilitas yang lebih terperinci dapat memberikan visibilitas objek pada level objek dan level kelas.
Misalnya Eiffel , menawarkan ekspor selektif: Anda dapat mengekspor fitur kelas apa pun ke kelas apa pun pilihan Anda, dari {NONE} (object-private) hingga {ANY} (setara dengan publik, dan juga default), ke {PERSON} (kelas-pribadi, lihat contoh OP), untuk kelompok kelas tertentu {PERSON, BANK}.
Menarik juga untuk berkomentar bahwa di Eiffel Anda tidak perlu membuat atribut menjadi pribadi dan menulis getter untuk mencegah kelas lain menetapkannya. Atribut publik di Eiffel secara default dapat diakses dalam mode hanya-baca, jadi Anda tidak memerlukan pengambil hanya untuk mengembalikan nilainya.
Tentu saja Anda masih memerlukan penyetel untuk menyetel atribut, tetapi Anda dapat menyembunyikannya dengan mendefinisikannya sebagai "pemberi tugas" untuk atribut itu. Ini memungkinkan Anda, jika ingin, menggunakan operator penetapan yang lebih nyaman daripada pemanggilan penyetel.