Nur meine 2 Cent auf die Frage, warum die Semantik der privaten Sichtbarkeit in Java eher auf Klassenebene als auf Objektebene ist.
Ich würde sagen, dass Bequemlichkeit hier der Schlüssel zu sein scheint. Tatsächlich hätte eine private Sichtbarkeit auf Objektebene in dem vom OP dargestellten Szenario gezwungen, Methoden anderen Klassen (z. B. im selben Paket) auszusetzen.
In Wahrheit konnte ich weder ein Beispiel finden, das zeigt, dass die Sichtbarkeit auf klassenprivater Ebene (wie sie von Java angeboten wird) im Vergleich zur Sichtbarkeit auf objektprivater Ebene Probleme verursacht.
Programmiersprachen mit einem feinkörnigeren System von Sichtbarkeitsrichtlinien können jedoch sowohl Objektsichtbarkeit auf Objektebene als auch auf Klassenebene bieten.
Zum Beispiel bietet Eiffel einen selektiven Export: Sie können jedes Klassenfeature in eine beliebige Klasse Ihrer Wahl exportieren, von {NONE} (objektprivat) über {ANY} (das Äquivalent von public und auch die Standardeinstellung) bis {PERSON} (klassenprivat, siehe Beispiel des OP) für bestimmte Klassengruppen {PERSON, BANK}.
Es ist auch interessant zu bemerken, dass Sie in Eiffel kein Attribut privat machen und keinen Getter schreiben müssen, um zu verhindern, dass andere Klassen ihm zuweisen. Öffentliche Attribute in Eiffel sind standardmäßig im schreibgeschützten Modus verfügbar, sodass Sie keinen Getter benötigen, um ihren Wert zurückzugeben.
Natürlich benötigen Sie noch einen Setter, um ein Attribut festzulegen, aber Sie können es ausblenden, indem Sie es als "Zuweiser" für dieses Attribut definieren. Auf diese Weise können Sie auf Wunsch den bequemeren Zuweisungsoperator anstelle des Setter-Aufrufs verwenden.