Keine mir bekannte Sprache erzwingt das Aufrufen der überschriebenen Methode. In der Tat erlauben einige Sprachen das Überschreiben von Methoden, die nicht überschrieben werden können (z. B. die Verwendung des newSchlüsselworts in C #). Es gibt jedoch zwei Möglichkeiten, dies zu erreichen.
Die erste Möglichkeit besteht darin, eine nicht überschreibbare Methode zu erstellen (z. B. eine, bei der das virtualSchlüsselwort in C # fehlt oder die das finalSchlüsselwort in Java enthält), die eine überschreibbare Methode aufruft, die nicht von außerhalb der Klasse aufgerufen werden kann (z. B. protectedin C #, Java oder C ++).
class C
A
statement1
F
statement3
protected virtual F
statement2
und
class D inherits C
protected override F
statement4
C.F()
Das Überschreiben von Klassen steht Ces frei, das FVerhalten zu überschreiben und zu ändern, aber Anrufer von außerhalb der Klasse greifen nur über zu A.
Bearbeiten: Wie bereits erwähnt, wird dies als Template-Methodenmuster bezeichnet .
Die zweite Möglichkeit besteht darin, eine Sprache zu verwenden, die in der Basisklasse angegebene Vor- und Nachbedingungen wie Eiffel oder C # mit Codeverträgen erzwingt. Der Aufruf der Basisklasse wird nicht erzwungen, aber die überschriebene Methode kann gezwungen werden, dieselben Anweisungen auszuführen. Die Verwendung von Aspekten kann auch hilfreich sein, wenn die Sprache die Vererbung von Aspekten ermöglicht.