В Java вы должны использовать InstanceOf. Вы обнаружите, что люди препятствуют использованию экземпляра. Большинство людей считают это запахом кода. Зачем? Потому что вся причина использовать систему набора текста заключается в том, что вы можете обрабатывать разные типы, как если бы они были одинаковыми. Таким образом, другими словами, если вы собираете кучу разных типов, основываясь на том, что они имеют сходство, воплощенное в вашем базовом классе, вы должны быть довольны доступом к каждой из этих ссылок базового класса. Если вы пишете код, проверяющий каждый тип, а затем делаете разные вещи, это означает, что ваша система типов протекает.
Например, рассмотрите некоторые операции, которые вы, возможно, захотите выполнить. Возможно, вам нужно кормить каждого животного (в спасательном центре). Вы бы определили операцию в базовом классе, например, «любит есть», что указывает на то, что хочет это животное. Каждый подкласс обеспечивал бы собственную реализацию этого метода. Но из вашего основного кода вы можете просто перебирать коллекцию и вызывать метод из базового класса, не зная подробностей каждого из них. В этом случае ваша модель предоставила расширение. Помните поговорку: открытую для расширения, закрытую для модификации (приписывается Бертран Мейеру).
Если вы просто бросили кучу связанных объектов в коллекцию и решите: «Хорошо, я пойму, что делать с каждым, учитывая обстоятельства, которые я нахожу», тогда вы не следуете этому принципу.
Почему вы должны их отличить на самом деле? как правило, если вы серьезно хотите изучить некоторые проблемы, вам нужно понять динамическую отправку. – HuStmpHrrr
Я пытаюсь tokenize ввод строки. Мой суперкласс - это токен, а его подклассы: круглые скобки, число, оператор. Я положил их в арраиста. Мне нужно различать их, чтобы выполнять определенную функцию, основанную на их типе. Это их другой способ (лучший способ?), Чем использовать instanceOf для этого случая? –
Но разве они не выполняют одно и то же действие; 'apply()' например? Затем вы переопределяете применение в каждом подклассе и просто вызываете 'theThing.apply()'. Он применяет его надлежащим образом на основе конкретного типа экземпляра. – ChiefTwoPencils