Was sind sealed classes?
v.15Das Prinzip der sealed
classes stellt ein Verfahren dar, um
Ableitungen von Klassen und Interfaces zu kontrollieren
bzw. zu beschränken. Das Schlüsselwort sealed
gibt hierbei an, dass eine Klasse oder ein Interface nur
durch vorgegebene Typen erweitert werden darf. Bei einem
Interface wird darüber hinaus zusätzlich
geregelt, welche Klassen das Interface implementieren
dürfen. Welche Klassen oder Schnittstellen dies
sind, wird durch permits
spezifiziert.
Um
eine Klasse oder ein Interface als sealed
zu deklarieren, wird das Schlüsselwort sealed
zu den Klassenmodifizierern hinzugefügt. Nach
beliebigen extends
- oder implements
-Anweisungen
muss das Schlüsselwort permits
gefolgt
von einer Komma-separierten Liste von Klassen- bzw.
Interfacebezeichnern notiert werden.
Eine als sealed
deklarierte Klasse muss
sich mit seinen Unterklassen entweder im gleichen
benannten Modul oder, falls in einem unbenannten Modul,
im gleichen package befinden.
public sealed class Literatur permits Roman, Gedicht, Sachbuch {} sealed class Roman extends Literatur permits Krimi, Liebesroman {} final class Gedicht extends Literatur {} non-sealed class Sachbuch extends Literatur {} final class Krimi extends Roman {} final class Liebesroman extends Roman {}
Die abgeleiteten Klassen müssen ihrerseits durch einen der folgenden Modifizierer gekennzeichnet werden:
sealed |
wiederum müssen hier Kindklassen durch permits
angegeben werden.
|
non-sealed |
hier liegen keine Einschränkungen vor. |
final |
eine Ableitung von dieser Klasse ist nicht möglich. |
Oracle gibt an, dass die permits
-Anweisungen
dann entfallen können, wenn die erlaubten
Subklassen in der Datei der Elternklasse definiert
werden.1 Die
Eclipse-Version des Autors (Version: 2022-03 (4.23.0))
wusste hiervon allerdings nichts und verlangte immer
eine entsprechende Anweisung.
Quellen
Wenn Ihnen javabeginners.de gefällt, freue ich mich über eine Spende an diese gemeinnützigen Organisationen.