Для разъяснения, большинство из вас неправильно поняли его вопрос. Он не спрашивает о «переопределении» метода, он спрашивает, есть ли способ предотвратить «сокрытие» или нет. И простой ответ таков: «нет никого!».
Вот его пример еще раз
Родительский класс определяет функцию:
int foo() { return 1; }
Дочерний класс, наследующий Parent, определяет ту же функцию СНОВА (не переопределяя):
int foo() { return 2; }
Вы можете сделать это на всех языках программирования. Ничто не мешает скомпилировать этот код (кроме настройки в компиляторе). Лучшее, что вы получите, - это предупреждение о том, что вы скрываете метод родителя. Если вы вызовете дочерний класс и вызовете метод foo, вы получите 2. Вы практически нарушили код.
Это то, что он просит.