Я проводил несколько тестов с методом java equals и понял, что если мой параметр не относится к универсальному типу Object, тест не пройдет, даже если два создаваемых мной объекта относятся к этому типу. Допустим, я хочу проверить, является ли объект животным, я попытался записать:
public boolean equals(Animal other) {
*some code*
}
А затем я создаю тест для этого метода, чтобы сравнить животных. Но если я это сделаю, тест не удастся, с другой стороны, если я напишу:
public boolean equals(Object other) {
*some code*
}
а затем проверьте это, тест пройдет. Я понимаю, что объявлять объект желаемого типа бесполезно, и пытаюсь его протестировать, но не понимаю, почему это не работает в тестовом сценарии хорошей погоды.




Метод equals является частью базового класса Object в Java, и единственный способ воспользоваться им - это отвергать. Чтобы переопределить его, вам нужно придерживаться той же сигнатуры, которая сообщит любым библиотекам, использующим equals, вызывать ваш метод вместо базового.
В приведенном выше коде выполняется перегрузка, который полностью отличается от метода компилятора Java.
Это просто, сигнатура метода класса объекта equals такова.
public boolean equals(Object obj)
Но если вы напишете метод equals с параметром Animal, то это не будет метод равенства Overridden из класса объекта. и когда вы пытаетесь сравнить объекты с помощью .equals() Object class equals, будет вызываться
По этой причине и для ясности всегда рекомендуется использовать аннотацию @Override.