Вы почти ответили на свой вопрос.Чтобы получить имя класса Moter, все, что вам нужно сделать, это примерно так:
Car c = new Car();
Class cClass = c.getClass();
Object uncastedMotor = cClass.getDeclaredMethod("getMotor").invoke(c, null);
String motorName = ((Motor)uncastedMotor).getName();
Имейте в виду, что метод invoke может возвращать Object, если метод не является void.
Также, если у вас есть классы Car и VehicleClass, лучшим способом было бы создать новый интерфейс, объявляющий все функции, специфичные для Car или VehicleClass, и добавить к нему getMotor.Затем вы можете проверить, принадлежит ли объект этому интерфейсу, с помощью instanceof и привести его.Это намного более чистый код и гарантирует, что код продолжит работать, если классы будут изменены.
Использование рефлексии, вообще говоря, является последним средством.