Зачем при переопределении equals после сравнения классов делать приведение типов сравниваемых объектов?

В процессе изучения Java столкнулся с темой переопределения метода equals. Во всех гайдах на эту тему встречается такая последовательность:

if (obj == null || obj.getClass() != this.getClass()) {
        return false;
}

Person guest = (Person) obj;

Я понимаю смысл сравнения классов при сравнении объектов, но зачем дальше, зная что классы объектов и так идентичны, приводить один объект к типу другого?


Ответы (1 шт):

Автор решения: Fixpinger
  • При переопределении метода мы используем тот же тип аргументов, что и в оригинальном методе (Object), иначе это будет перегрузка (@Overload)
  • Так вот. переопределяя equals(), мы используем тип Object, то есть передаваемый аргумент принимает этот тип. Но переданный объект все равно будет относится к классу, которому принадлежал. Тоесть есть смысл сравнить классы.
  • Только если не сделать приведение типов, то поля объектов, необходимых нам для сравнения, будут недоступны.
  • То есть ты делаешь низходящее приведение типов от object к необходимому типу. Попробуй сам все это в среде разработки и поймешь.
→ Ссылка