Perché posso accedere direttamente alle mie variabili private dell’object “altro”, nel mio metodo equals (Object o)

In Java nel metodo equals (Object o) posso accedere alle variabili private dell’object passato senza passare attraverso i suoi getter pubblici.

public boolean equals(Object o){ ... MyObject other = (MyObject)o; return getProp() == other.prop; } 

Com’è quello?

I dati privati ​​sono accessibili da qualsiasi istanza di quella class, anche se un’istanza della class A accede ai membri privati ​​di un’altra istanza di A. È importante ricordare che i modificatori di accesso (privati, protetti, pubblici) controllano l’accesso alla class , non accesso di istanza .

La risposta probabile è che il progettista del modello di visibilità considera che qualsiasi sviluppatore che lavora in una class deve padroneggiare l’implementazione dell’intera class.

Ma questa è una ctriggers idea Questo incoraggia cattive pratiche. Uno sviluppatore che accede a un campo di Person , nella class Person , non deve conoscere l’implementazione dell’intera class. La buona pratica è usare l’accessor, senza dover sapere quali operazioni fa l’accessor.