Ningún idioma que conozco obliga a llamar al método anulado. De hecho, algunos idiomas permiten métodos de anulación que no son anulables (como el uso de la palabra clave new
en C #). Sin embargo, hay dos maneras de abordar esto.
El primero es crear un método no reversible (por ejemplo, uno que carezca de la palabra clave virtual
en C # o uno que tenga la palabra clave final
en Java) que llame a una que no se pueda llamar desde fuera de la clase (por ejemplo, protected
en C #, Java o C ++).
class C
A
statement1
F
statement3
protected virtual F
statement2
y
class D inherits C
protected override F
statement4
C.F()
Las clases que anulan C
son libres de anular F
y modificar su comportamiento, pero las personas que llaman fuera de la clase solo acceden a ella a través de A
.
Editar: Como han señalado otros, esto se denomina Patrón de método de plantilla .
La segunda forma es usar un lenguaje que imponga condiciones previas y postcondiciones especificadas en la clase base, como Eiffel o C # con contratos de código. No forzará que se llame a la clase base, pero el método anulado puede ser forzado a realizar las mismas declaraciones. El uso de aspectos también puede ayudar si el idioma permite que se hereden aspectos.