Ответ
Нет, стандартная реализация equals() (от класса Object) вернет false.
Причина: Контракт метода equals() в Java включает проверку на совпадение типов. Даже если состояния объектов идентичны, они принадлежат разным классам и, следовательно, не могут быть равными.
Пример, демонстрирующий проблему:
class Person {
String name;
// Конструктор, геттеры/сеттеры...
}
class Employee {
String name;
// Конструктор, геттеры/сеттеры...
}
Person p = new Person("Alice");
Employee e = new Employee("Alice");
System.out.println(p.equals(e)); // false (даже если не переопределен equals)
Правильная реализация equals() всегда включает проверку класса:
@Override
public boolean equals(Object o) {
if (this == o) return true;
// Критически важная проверка: объекты должны быть одного класса
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return Objects.equals(name, person.name);
}
Важно: Сравнение объектов разных классов обычно является ошибкой логики. Если такая необходимость есть, нужно явно проектировать иерархию наследования и использовать instanceof с осторожностью, соблюдая симметричность контракта.