Erklärung
Die Methoden einer Oberklasse können normalerweise von den Unterklassen überschrieben werden. Handelt es sich dabei um eine abstrakte Methode, dann muss die Methode sogar zwingend von den Unterklassen überschrieben werden.
Oft will man aber genau das Gegenteil erreichen, nämlich dass eine Methode einer Oberklasse auf gar keinen Fall von einer Unterklasse überschrieben und dadurch außer Kraft gesetzt werden kann. Dies ist oft der Fall bei Methoden für sicherheitsrelevante Prüfungen, Dateioperationen, Verschlüsselungen und so weiter.
Will man die Methode einer Oberklasse gegen ein solches Überschreiben absichern, stellt man das Schlüsselwort final vor den Bezeichner der Methode
Beispiel

Quelltext einer Oberklasse
Dieses Bild zeigt den Quelltext der Oberklasse BetterFileController, nach einem Beispiel aus [1, S. 250ff]. Drei Methoden sind hier als final deklariert worden: output(), start() und end().
Die Methode start() beginnt mit dem Speichern einer Datei, ein Vorgang, der tunlichst nicht von einer Unterklasse verändert werden sollte. Genau so ist es mit dem Beenden des Speicherns, auch diese Methode sollte nicht von einer Unterklasse verändert werden, um Probleme zu vermeiden.
Möchte eine Unterklasse Veränderungen an den Methoden start() oder end() vornehmen, gibt es die beiden Erweiterungsmethoden afterStart() und beforeEnd(). Diese Methoden können bei Bedarf von den Unterklassen überschrieben werden, um beispielsweise noch eine Kopfzeile oder eine Fußzeile einzufügen, wenn die Datei gespeichert wird.
Da diese beiden Methoden in der Oberklasse nicht als abstract deklariert worden sind, müssen Sie aber nicht von den Unterklassen überschrieben werden.
Die zentrale Methode - ebenfalls gegen Überschreiben geschützt, ist in diesem Beispiel output(). Diese Methode regelt das Speichern der Datei und bindet auch die beiden Erweiterungsmethoden mit ein. Eine solche Methode, das das grundsätzliche Ablaufen eines Algorithmus steuert, wird auch als Schablonen-Methode oder Template Method bezeichnet.
Quellen:
- Lahres et al.: Objektorientierte Programmierung. Rheinwerk Computing 2021.