Nenhum idioma que eu conheço impõe a chamada do método substituído. De fato, algumas linguagens permitem substituir métodos que não são substituíveis (como usar a newpalavra - chave em C #). No entanto, existem duas maneiras de abordar isso.
O primeiro é criar um método irrecuperável (por exemplo, um que não tenha a virtualpalavra - chave em C # ou um que tenha a finalpalavra - chave em Java) que chame um método substituível que não possa ser chamado de fora da classe (por exemplo, protectedem C #, Java ou C ++).
class C
A
statement1
F
statement3
protected virtual F
statement2
e
class D inherits C
protected override F
statement4
C.F()
A substituição de classes Cé livre para substituir Fe modificar seu comportamento, mas os chamadores de fora da classe apenas acessam-na A.
Edit: Como outros já apontaram, isso é chamado de padrão do método Template .
A segunda maneira é usar uma linguagem que imponha pré-condições e pós-condições especificadas na classe base, como Eiffel ou C # com Code Contracts. Não forçará a chamada da classe base, mas o método substituído poderá ser forçado a executar as mesmas instruções. O uso de aspectos também pode ajudar se o idioma permitir que aspectos sejam herdados.