Dlaczego mogę uzyskać dostęp do moich prywatnych zmiennych obiektu "other" bezpośrednio, w metodzie my equals (Object o)

W Javie w metodzie equals (Object o) mogę uzyskać dostęp do prywatnych zmiennych przekazywanego obiektu bez przechodzenia przez jego publiczne gettery.

public boolean equals(Object o){
    ...
    MyObject other = (MyObject)o;
    return getProp() == other.prop; 
}
Jak to?
Author: bdonlan, 2009-10-17

2 answers

Prywatne dane są dostępne przez dowolną instancję tej klasy, nawet jeśli jedna instancja klasy A ma dostęp do prywatnych członków innej instancji A. ważne jest, aby pamiętać, że modyfikatory dostępu (prywatne, chronione, publiczne) kontrolują dostęp do klasy , a nie dostęp do instancji .

 46
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-17 05:28:02

Prawdopodobna odpowiedź jest taka, że projektant modelu widzialności uważa, że każdy programista pracujący w klasie musi opanować implementację całej klasy.

Ale to jest zły pomysł . To zachęca do złych praktyk. Programista uzyskujący dostęp do pola Person, w klasie Person, nie musi znać implementacji całej klasy. Dobrą praktyką jest korzystanie z accessora, bez konieczności wiedzieć, jakie operacje accessor wykonuje.

 1
Author: Nicolas Barbulesco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-21 09:44:36