Bene, prima devi chiedere "perché hanno campi privati?"
I campi privati sono principalmente per l'incapsulamento: un utente di una classe non deve conoscere i componenti interni dell'implementazione di quella classe. In effetti, essi non dovrebbero sapere , perché se si basavano su quelle specifiche, l'implementatore sarebbe costretto a supportarle o interrompere la compatibilità all'indietro. In altre parole, protegge sia l'utente e progettista della classe:
- l'utente è protetto da modifiche di implementazione rompere il suo codice
- il progettista è protetto da dover tenere i dettagli di implementazione caratteristiche immutate per sempre
Ma una classe non ha bisogno di essere protetta da se stessa; non ha bisogno di preoccuparsi del caso in cui un bit del suo codice cambia, ma un altro bit (che utilizza il primo bit) non può cambiare. La retrocompatibilità non è un problema, perché la classe è sviluppata come un unico blocco atomico di codice. In altre parole, nessuna delle protezioni di cui sopra è necessaria.
Poiché non è necessario proteggere i campi e poiché è spesso necessario vederli (ad esempio, per confrontare se due oggetti sono uguali), sono visibili all'interno della classe.
Bene, è tutto di una classe, quindi è possibile accedere ai propri membri privati. Ad esempio, se non vuoi aggiornare 'secret', non farlo. La codifica non può proteggerti da te stesso. – markspace
La definizione di 'private' dice che solo le istanze di' Foo' possono accedervi. Dato che sei in "Foo" puoi accedervi. –
La semantica del linguaggio permette questo, mi chiedo perché. –