Heim >Java >javaLernprogramm >Versiegelte Klassenregeln in Java
Versiegelte Klassen sind eine neue Funktion, die in Java-Versionen 15 und höher eingeführt wurde und mehr Kontrolle und Flexibilität bei der Klassenvererbung innerhalb eines Moduls bieten soll. Eine versiegelte Klasse erlegt ihren Unterklassen bestimmte Einschränkungen auf und ermöglicht so eine eingeschränkte und organisierte Struktur der Klassenhierarchie.
Zunächst müssen eine versiegelte Klasse und ihre Unterklassen zum selben Modul oder, falls in einem unbenannten Modul deklariert, zum selben Paket gehören. Dadurch wird sichergestellt, dass alle Klassen innerhalb der Hierarchie einer versiegelten Klasse in einer bestimmten Umgebung zugänglich und verwaltbar sind.
Außerdem muss jede zulässige Unterklasse die versiegelte Klasse direkt erweitern. Dadurch wird eine klare und prägnante Hierarchie gewährleistet, ohne dass sich Unterklassen auf unerwartete Weise verzweigen.
Als nächstes muss jede zulässige Unterklasse einen Modifikator auswählen, der beschreibt, wie sie die von ihrer Oberklasse initiierte Versiegelung fortsetzt. Für diese Modifikatoren gibt es drei Optionen:
1) Final: Dieser Modifikator macht die Unterklasse zur letzten Ebene in der Klassenhierarchie und verhindert jede weitere Erweiterung.
2) Versiegelt: Dieser Modifikator ermöglicht eine weitere Erweiterung der Unterklasse, jedoch in eingeschränkter Weise. Alle Unterklassen einer versiegelten Unterklasse müssen von der versiegelten Oberklasse explizit zugelassen werden.
3) Nicht versiegelt: Dieser Modifikator setzt den Teil der Unterklasse der Hierarchie in einen offenen Zustand zurück, sodass unbekannte Unterklassen ihn erweitern können.
Betrachten Sie als Beispiel eine Shape-Klasse, die als versiegelt deklariert ist, mit zwei zulässigen Unterklassen – Circle und Square. In diesem Fall kann Circle als endgültig deklariert werden, während Square als nicht versiegelt deklariert werden kann, sodass unbekannte Unterklassen es weiter erweitern können.
Es ist wichtig zu beachten, dass eine Klasse nur einen Modifikator aus „final“, „sealed“ und „non-sealed“ haben kann. Es ist nicht möglich, dass eine Klasse gleichzeitig besiegelt und endgültig ist, da sie gegensätzlichen Zwecken dienen.
Darüber hinaus können abstrakte Klassen auch als versiegelt oder nicht versiegelt deklariert werden und abstrakte Mitglieder haben. Versiegelte Klassen können abstrakte Unterklassen zulassen, solange sie ebenfalls versiegelt oder nicht versiegelt sind.
Schließlich muss die Zugänglichkeit einer zulässigen Unterklasse nicht mit der Zugänglichkeit der versiegelten Klasse übereinstimmen. Unterklassen können weniger zugänglich sein, solange sie für die versiegelte Klasse weiterhin zugänglich sind. Dies kann dazu führen, dass einige Benutzer in der zukünftigen Version nicht in der Lage sind, Unterklassen ohne eine Standardklausel umfassend umzuschalten, wenn der Mustervergleich durch Schalter unterstützt wird.
Um das Konzept versiegelter Klassen besser zu verstehen, werfen wir einen Blick auf einige Codierungsbeispiele.
Im folgenden Codeausschnitt wird eine versiegelte Klassenwährung definiert.
sealed class Currency permits Dinar { //:sealed Check out the non-sealed class inheritance for legal recommendations }
Damit eine legale Unterklasse erstellt werden kann, muss die Klasse im selben Modul deklariert werden und direkt die Währungsklasse erweitern. Eine versiegelte Klasse kann nicht verhindern, dass ihre zulässigen Unterklassen eingeschränkt erweitert werden oder für die Erweiterung durch unbekannte Unterklassen offen sind. Daher muss sich Dinar im selben Modul befinden.
Wenn wir den Codeausschnitt weiterführen, erweitert die nicht versiegelte Klasse Dinar die versiegelte Klasse Währung. Die nicht versiegelte Klasse ermöglicht die Erstellung und Erweiterung weiterer Unterklassen.
public non-sealed class Dinar extends Currency { // This class can be extended by any unknown subclass }
Wenn wir alternativ die Unterklassen einschränken möchten, die Dinar erweitern können, können wir die Klasse als versiegelt deklarieren und über die Genehmigungsklausel angeben, welche Unterklassen zulässig sind.
sealed class Dinar extends Currency permits JordanianDinar, KuwaitiDinar { // Only subclasses JordanianDinar and KuwaitiDinar are permitted }
Die Unterklassen JordanianDinar und KuwaitiDinar müssen im selben Modul wie Dinar deklariert werden und müssen die versiegelte Klasse Dinar direkt erweitern. Sie können je nach gewünschtem Grad der Einschränkung entweder versiegelt, nicht versiegelt oder sogar endgültig sein.
Durch die Verwendung versiegelter Klassen können wir eine Hierarchie verwandter Klassen erstellen und haben mehr Kontrolle darüber, welche Unterklassen erstellt und erweitert werden können, was für eine bessere Kapselung und Modularität in unserem Code sorgt. Es trägt auch zur Verbesserung der Typsicherheit bei, da der Compiler uns warnen kann, wenn wir versuchen, eine illegale Unterklasse zu erstellen.
Zusammenfassend lässt sich sagen, dass versiegelte Klassen einen organisierteren und strukturierteren Ansatz für die Klassenvererbung bieten und so mehr Kontrolle und Flexibilität innerhalb eines Moduls ermöglichen. Durch die Auferlegung von Einschränkungen für Unterklassen und die Bereitstellung von Optionen für eine weitere Erweiterung sorgen versiegelte Klassen für eine bewusstere und bewusstere Klassenhierarchie.
Das obige ist der detaillierte Inhalt vonVersiegelte Klassenregeln in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!