Вы делаете это с помощью соответствующих идей дизайна OO; и первое, что там: вы должны никогда никогда попасть в бизнес по созданию методов, как doSomethingForClassA(), doSomethingForClassB(), ...
Наивный способ может быть, чтобы сделать ваш класс GeoObject реферата; и добавить абстрактный метод rotate(); и boolean-возвращающий поддерживает Rotation().
Ваши подклассы должны были бы реализовать эти два метода правильным образом. Предостережение с этим решением: в зависимости от вашего «моделирования» GeoObject, возможно, должно быть не знать о «поворотах» - идея наличия специального класса вращения имеет определенные достоинства; особенно если учесть, что может быть много других преобразований, которые можно применить к объекту GeoObject.
Одним из способов решения таких ситуаций может быть visitor pattern.
Редактировать: с учетом вашего комментария Мне интересно, можете ли вы создать свою собственную оболочку вокруг GeoObject. Может быть, даже что-то простое, например,
public class GeoObjectWrapper {
private final GeoObject wrappedObject;
public GeoObjectWrapper(GeoObject wrappedObject) {
this.wrappedObject = wrappedObject);
}
public Object getWrapped() { return wrappedObject; }
, чтобы затем внедрить эти новые методы в класс обертки.
Но да, чтобы придумать решение, которое не делает такие уродливые вещи, как rotatateTriangle() ... вам, вероятно, нужны механизмы отражения на вашем языке программирования.
Обновите свой вопрос, добавив невероятно важную информацию, которую вы не можете изменить исходный код для реализаций GeoObject. В противном случае каждый ответ на ваш вопрос подскажет вам изменить эти реализации. –