Nun, zuerst müssen Sie fragen, "warum private Felder überhaupt haben?"
Private Felder sind in erster Linie für die Kapselung: Ein Benutzer einer a-Klasse sollte nicht die Interna der Implementierung dieser Klasse kennen müssen. In der Tat, sie sollten nicht wissen, denn wenn sie sich auf diese Besonderheiten verlassen, dann wäre der Implementierer gezwungen, sie zu unterstützen oder Rückwärtskompatibilität zu brechen. Mit anderen Worten, es schützt sowohl den Anwender und Designer der Klasse:
- wird der Benutzer von der Implementierung Änderungen geschützt ihren Code zu brechen
- die Designer aus, die halten Funktionen Implementierungsdetails unverändert für immer
geschützt
Aber eine Klasse muss nicht vor sich selbst geschützt werden; es muss sich nicht um den Fall kümmern, in dem sich ein Bit seines Codes ändert, aber ein anderes Bit (das das erste Bit verwendet) kann sich nicht ändern. Rückwärtskompatibilität ist kein Problem, da die Klasse als einzelner, atomarer Codeabschnitt entwickelt wird. Mit anderen Worten, keiner der obigen Schutz wird benötigt.
Da die Felder nicht geschützt werden müssen und es oft notwendig ist, sie zu sehen (z. B. um zu vergleichen, ob zwei Objekte gleich sind), sind sie in der Klasse sichtbar.
Nun, es ist alles eine Klasse, so dass Sie Ihre eigenen privaten Mitglieder zugreifen können. Wenn Sie zum Beispiel 'secret' nicht aktualisieren wollen, tun Sie das nicht. Die Codierung kann Sie nicht vor sich selbst schützen. – markspace
Die Definition von 'privat' besagt, dass nur Instanzen von' Foo' darauf zugreifen können. Da du in "Foo" bist, kannst du darauf zugreifen. –
Die Semantik der Sprache erlaubt dies, ich frage warum. –