Offizielle Maßnahmen
Ein Schlüsselwort "endgültig", das von der Java -Sprache bereitgestellt wird, kann verwendet werden, um diese Aufgabe auszuführen. Schauen Sie sich das folgende Beispiel für den Quellcode an:
Die Codekopie lautet wie folgt:
// FinalDemo.java
Public Final Class FinalDemo {
}
Lassen Sie uns unten eine andere Klasse erstellen, die die oben erklärte Klasse erben wird. Das von der Java -Sprache bereitgestellte Schlüsselwort "erweitert" ermöglicht es einer Klasse, von einer vorhandenen Klasse zu erben.
Die Codekopie lautet wie folgt:
// FinalDemo2.java
Public Class FinalDemo2 erweitert FinalDemo {
}
Nachdem Sie die erste Klasse zusammengestellt haben, meldet der JDK -Compiler, wenn Sie dann die zweite Klasse kompilieren, einen Fehler und Sie erhalten die folgende Fehlermeldung:
FinalDemo2.java:1: Kann nicht vom Finaldemo erben
Public Class FinalDemo2 erweitert FinalDemo {}
^
1 Fehler
Jetzt haben Sie erfolgreich verhindert, dass die erste Klasse von einer anderen Klasse durch offizielle Methoden geerbt wird.
Inoffizielle Maßnahmen
Der Weg, um zu verhindern, dass Klassen von anderen Klassen geerbt werden, ist jedoch nicht einzigartig. In Anbetracht des folgenden Code erkläre ich, dass der Konstruktor privat ist, und erkläre auch eine statische Methode, um ein Klassenobjekt zurückzugeben.
Die Codekopie lautet wie folgt:
öffentliche Klasse privatetest {
private privatetest () {
System.out.println ("privater Standardkonstruktor");
}
public static privatetest getInstance () {
neue privatetest () zurückgeben;
}
}
Der oben geänderte Code heißt "Singleton Muster", eine GetInstance -Methode gibt immer nur eine Instanz dieser Klasse zurück. Aber warum verhindert dieser Code, dass die Klasse geerbt wird? Betrachten Sie den folgenden Code, die deklarierte Klasse sollte die obige Klasse erben.
öffentliche Klasse privatetest2 erweitert privatetest {
}
Nachdem Sie die erste Klasse zusammengestellt haben, meldet der JDK -Compiler, wenn Sie dann die zweite Klasse kompilieren, einen Fehler und Sie erhalten die folgende Fehlermeldung:
Privatetest2.java:1: privatetest () hat einen privaten Zugang im Privatetest
öffentliche Klasse privatetest2 erweitert privatetest {
^
1 Fehler
Die zweite Klasse kann die erste Klasse nicht erben. Aber was bedeutet der Fehler? Die Java -Sprache erfordert, dass mindestens eine Komponentenmethode in einer Klasse bereitgestellt wird. Wenn Sie keine Artefaktmethoden bereitstellen, fügt der JDK eine Standard -Artefaktmethode in die von Ihnen deklarierte Klasse ein. Mit anderen Worten, die Standardeinstellung ist eine Komponentenmethode ohne Parameter, leerer Komponentenkörper und eine Erlaubnis zur öffentlichen Zugriff. Wenn Sie jedoch selbst eine Komponentenmethode definieren, fügt der JDK -Compiler eine solche Standardkomponentenmethode nicht ein. Wir haben gerade eine Standardkomponentenmethode in der privatetest -Klasse deklariert, aber wir haben die standardmäßige öffentliche Zugriffserlaubnis in die private Genehmigung geändert, die den Regeln der JDK -Compiler -Syntaxprüfung entspricht.
Schauen wir uns nun die zweite Abteilung an. In der Java -Sprache müssen Sie auch die Komponentenmethode der Superklasse in der ersten Zeile der Komponentenmethode aufrufen. Dies ist erforderlich, um Erbschaftsfunktionen zu beginnen. In Java erledigen wir diese Aufgabe, indem wir die Super () -Methode aufrufen, die der Komponentenmethode einer Superklasse zugeordnet wird. Wenn Sie keinen Standardkonstruktor für die Superklasse angeben, fügt der JDK -Compiler eine Standard -Superklasse -Komponentenmethode zum Aufrufen ein.
Wir haben den Konstruktor gerade als private Erlaubnis in der ersten Klasse erklärt. Wenn wir diese Klasse nun aus anderen Klassen erben, versucht der Compiler, eine Standard -Superklassenkomponentenmethode aufzurufen. Da Komponentenmethoden innerhalb des Supercass -Bereichs als private Erlaubnis deklariert werden, meldet der Compiler einen Fehler, in dem die Superklassenkomponentenverfahren nicht aufgerufen werden können. Daher verhindern wir, dass eine Klasse von anderen Klassen durch inoffizielle Methoden geerbt wird.
Usman Saleem
Mohammad Ali Jinnah Universität
E-Mail: [email protected]