Нет ничего особенно плохого в переопределении equals, и, конечно, нет ничего плохого в доступе к закрытым методам через их геттеры, если это то, что вам нужно сделать.
Однако здесь есть небольшая концептуальная проблема, связанная сПринцип подстановки Лискова, который гласит, что вы должны иметь возможность заменить дочерний класс базовым классом и не получить никаких концептуальных изменений поведения.
Если реализованный вами метод equals () равен концептуально сильно отличающийся от равенства, реализованного в базовом классе, людям, использующим ваш код (например, сопровождающим), будет трудно понять.Они будут кодировать, основываясь на определенных предположениях, и эти предположения окажутся неправильными.Например, если основание equals () основано на ссылочном равенстве, то есть
equals(Object o) { return this == o;}
, и ваша реализация делает что-то совсем другое, пользователям необходимо знать больше о конкретной реализации, чем им следовало бы.Это также будет нарушать симметричность: x.equals (y) не будет совпадать с y.equals (x), если x - ваш дочерний класс, а y - базовый класс.
При этом ни один из них не являетсянепреодолимы, и если вы не можете изменить базу, у вас может не быть выбора.Добавьте много комментариев к вашему классу.