Когда вы переопределяете функцию в производном классе, только эта функция в производном классе видна пользователю этого класса. Версия базового класса становится скрытой.
Поэтому ваш указатель pChild, вызывающий doIt (int x), потерпит неудачу, так как вы используете указатель производного класса для вызова функции базового класса. Указатель pParent, вызывающий doIt (int x), будет работать, так как вы используете указатель базового класса для вызова функции базового класса. Даже если у вас есть дочерний объект, на который указывает родительский указатель (upcasted), тип класса здесь определяется объявлением указателя, который является CParent.
Чтобы иметь возможность вызвать этот базовый класс с помощью указателя производного класса вы можете:
pChild->CParent::doIt(123);
Различие между @Component, @Repository, @Controller & аннотации @Service
@Component †“универсальный и могут использоваться через приложение.
@Service †“аннотируют классы на уровне уровня служб.
@Controller †“аннотируют классы на уровне уровней представления, главным образом используемом в Spring MVC.
@Repository †“аннотируют классы на слое персистентности, который будет действовать как репозиторий базы данных.
@Controller = @Component (Внутренняя Аннотация) + Функции Уровня представления
@Service = @Component (Внутренняя Аннотация) + Функции Уровня служб
@Component = Фактические Компоненты (Бобы)
@Repository = @Component (Внутренняя Аннотация) + Функции Слоя Данных (используют для обработки Доменных Бобов)