Nessuna lingua che conosco applica forzatamente il metodo sovrascritto. In effetti, alcuni linguaggi consentono metodi di sovrascrittura che non sono sovrascrivibili (come l'utilizzo della parola chiave new
in C #). Tuttavia, ci sono due modi per affrontarlo.
Il primo è quello di creare un metodo non sostituibile (ad esempio quello che manca la parola chiave virtual
in C # o quella che ha la parola chiave final
in Java) che chiama una chiave sovrascrivibile che non può essere chiamata al di fuori della classe (es. protected
in C #, Java o C ++).
class C
A
statement1
F
statement3
protected virtual F
statement2
e
class D inherits C
protected override F
statement4
C.F()
Le classi che sovrascrivono C
sono libere di eseguire l'override di F
e modificarne il comportamento, ma i chiamanti esterni alla classe accedono solo tramite A
.
Modifica: come altri hanno sottolineato, questo è chiamato modello di metodo Template .
Il secondo modo è usare un linguaggio che imponga le condizioni preliminari e postcondizionate specificate nella classe base, come Eiffel o C # con Contratti di codice. Non imporrà la chiamata alla classe base ma il metodo sottoposto a override può essere forzato ad eseguire le stesse istruzioni. L'utilizzo degli aspetti può essere d'aiuto anche se la lingua consente l'ereditarietà degli aspetti.