Оба метода имеют свои проблемы.
Если подкласс меняет идентичность, то вам нужно сравнить их фактические классы. В противном случае вы нарушаете симметричное свойство. Например, различные типы Person
не должны считаться эквивалентными, даже если они имеют одинаковые имена.
Однако некоторые подклассы не меняют идентичность, и для них необходимо использовать instanceof
. Например, если у нас есть набор неизменных Shape
объектов, то Rectangle
с длиной и шириной 1 должен быть равен единице Square
.
На практике, я думаю, что первый случай более вероятен, чтобы быть правдой. Как правило, создание подклассов является фундаментальной частью вашей идентичности, и быть точно таким же, как ваш родитель, за исключением того, что вы можете сделать одну маленькую вещь, не делает вас равными.