เพียง 2 เซ็นต์ของฉันกับคำถามที่ว่าทำไมความหมายของการมองเห็นส่วนตัวใน Java จึงเป็นระดับคลาสมากกว่าระดับอ็อบเจ็กต์
ฉันจะบอกว่าความสะดวกดูเหมือนจะเป็นกุญแจสำคัญที่นี่ ในความเป็นจริงการมองเห็นส่วนตัวในระดับอ็อบเจ็กต์จะต้องบังคับให้แสดงเมธอดกับคลาสอื่น ๆ (เช่นในแพ็คเกจเดียวกัน) ในสถานการณ์ที่แสดงโดย OP
ในความเป็นจริงฉันไม่สามารถสร้างหรือหาตัวอย่างที่แสดงให้เห็นว่าการมองเห็นในระดับคลาสส่วนตัว (เช่นที่ Java นำเสนอ) สร้างปัญหาใด ๆ หากเทียบกับการมองเห็นในระดับออบเจ็กต์ส่วนตัว
ที่กล่าวว่าภาษาโปรแกรมที่มีระบบนโยบายการมองเห็นที่ละเอียดยิ่งขึ้นสามารถให้ทั้งการมองเห็นวัตถุในระดับวัตถุและระดับชั้นเรียน
ตัวอย่างเช่นEiffelมีการส่งออกแบบเฉพาะเจาะจง: คุณสามารถส่งออกคุณลักษณะของคลาสใด ๆ ไปยังคลาสใดก็ได้ที่คุณเลือกจาก {NONE} (object-private) ถึง {ANY} (เทียบเท่ากับ public และเป็นค่าเริ่มต้น) ไปยัง {PERSON} (class-private ดูตัวอย่างของ OP) สำหรับกลุ่มเฉพาะของชั้นเรียน {PERSON, BANK}
นอกจากนี้ยังน่าสนใจที่จะสังเกตว่าใน Eiffel คุณไม่จำเป็นต้องทำให้แอตทริบิวต์เป็นส่วนตัวและเขียน getter เพื่อป้องกันไม่ให้ชั้นเรียนอื่นมอบหมายให้ โดยค่าเริ่มต้นแอตทริบิวต์สาธารณะใน Eiffel สามารถเข้าถึงได้ในโหมดอ่านอย่างเดียวดังนั้นคุณจึงไม่จำเป็นต้องมีเพียงผู้ใช้เพื่อคืนค่า
แน่นอนว่าคุณยังต้องมีตัวตั้งค่าเพื่อตั้งค่าแอตทริบิวต์ แต่คุณสามารถซ่อนได้โดยกำหนดเป็น "ผู้กำหนด" สำหรับแอตทริบิวต์นั้น สิ่งนี้ช่วยให้คุณสามารถใช้ตัวดำเนินการมอบหมายที่สะดวกกว่าแทนการเรียกใช้ setter ได้หากต้องการ