Да, оба ответа здесь - как это ни парадоксально - правильно.
Ответ Тома о том, что ваш вопрос сомнителен, находится на высоте. Как правило, нет причин определять конкретный тип объекта из других в его иерархии. (Я имею в виду за пределами фантазии использования-отражения)
Ответ Botz3000 (как и все остальные, которые только появились при вводе текста) технически верен.
Как вы думаете, вы решаете, какой метод вызывать в классе? В этом случае используйте аннотацию @Override, переопределите метод в дочерних классах и предоставьте абстрактный метод в родительском (или конкретную версию, которая делает базовые вещи?)
Из ваших имен классов, я подозреваю, вы должны быстро провести тест на шаблон Абстрактной фабрики и (чрезвычайно простой) шаблон стратегии.
PS Если вы хотите получить fancy и использовать отражение, вы можете просто вызвать getClass () и проверить это. Но есть, и я хочу подчеркнуть это, нет причин делать это, и это плохая практика. Но вот ты где.