Подскажите пожалуйста: для сравнения объектов используется переопределение метода equals от класса Object и апкаст: public class Man { private int dnaCode; // переменная класса public Man(int dnaCode) { // конструктор this.dnaCode=dnaCode; } @Override public boolean equals(Man man) { // метод equals для сравнения Man man = (Man) obj; // приведение параметра к типу класса return dnaCode == man.dnaCode; // сравнение объектов по полю dnaCode } } При этом надо учитывать все возможные ситуации, и ставить на них проверку. А что мы выигрываем от обращения к классу Object? Почему бы не прописать все эти проверки в самом классе и для этого не потребуется делать перегрузку и апкаст объекта: public class Man { private int dnaCode; public Man(int dnaCode) { this.dnaCode=dnaCode; } public boolean equals(Man man) { // пишем метод в своем класса без обращения к родителю. Получается вроде проще... return dnaCode == man.dnaCode; } }