Смысл наследования в том, что вам не нужно знать, в каком подклассе вы работаете. Например, скажем, что и люди, и монстры имели общий класс «Мобильный», а у Мобильного был абстрактный метод «движение». Люди могут отвергать движение, чтобы пройтись по карте, птицы могут отвергать ее, чтобы летать, а наземные акулы могут плавать под землей.
Дело в том, что ваша карта просто вызывает Mobile.move (), и действие будет делегировано фактическому подклассу для выполнения перемещения.
Если вам нужно знать, какой класс вы используете, вы делаете это неправильно - однако иногда вам нужно что-то знать о классе, например, если местность непроходима, тогда вы можете вызвать Mobile.canFly () чтобы увидеть, поддерживает ли данный зверь полет.
Позже, если вы решите, что люди могут летать с помощью заклинаний, вы просто изменяете класс людей, и все остальное просто работает, но если вы проверили класс и позволили "Стервятнику", "Орлу" и "Дракону" летать над препятствие, тогда ваш код будет намного сложнее исправить, если вы измените его или добавите к нему.