¿Por qué puedo acceder a mis variables privadas del “otro” objeto directamente, en mi método equals (Object o)?

En Java en el método equals (Object o), puedo acceder a las variables privadas del objeto pasado sin pasar por los getters públicos.

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

¿Como es que?

Cualquier instancia de esa clase puede acceder a los datos privados, incluso si una instancia de la clase A está accediendo a los miembros privados de otra instancia de A. Es importante recordar que los modificadores de acceso (privado, protegido, público) controlan el acceso de clase , no acceso a la instancia .

La respuesta probable es que el diseñador del modelo de visibilidad considere que cualquier desarrollador que trabaje en una clase debe dominar la implementación de toda la clase.

Pero esta es una mala idea . Esto fomenta malas prácticas. Un desarrollador que acceda a un campo de Person , en la clase Person , no tiene que conocer la implementación de toda la clase. La buena práctica es usar el accesorio, sin tener que saber qué operaciones hace el accesorio.