Я не знаю мови про примусові виклики методу, що перекривається. Дійсно, деякі мови дозволяють переосмислювати методи, які не можна перезаписати (наприклад, використання newключового слова в C #). Однак є два способи наблизитись до цього.
Перший полягає у створенні непереборного методу (наприклад, у якого відсутнє virtualключове слово в C # або у finalключового слова на Java), який викликає перезавантажуваний, який неможливо викликати поза класом (наприклад, protectedу C #, Java або C ++).
class C
A
statement1
F
statement3
protected virtual F
statement2
і
class D inherits C
protected override F
statement4
C.F()
Переосмислення класів Cможе вільно змінювати Fта змінювати його поведінку, але абоненти, що не входять до класу, отримують лише доступ до нього A.
Редагувати: Як вже вказували інші, це називається шаблоном методу Шаблон .
Другий спосіб - використовувати мову, яка виконує передумови та постумови, визначені в базовому класі, наприклад, Ейфелева або C # з кодовими контрактами. Це не змусить виклик базового класу, але замінений метод може бути змушений виконувати ті самі оператори. Використання аспектів також може допомогти, якщо мова дозволяє успадковувати аспекти.