Zwei weitere Optionen:
macht jede Methode endgültig, damit die Leute sie nicht überschreiben können. Sie vermeiden auf diese Weise den versehentlichen Aufruf von Methoden aus der Unterklasse. Dies hört jedoch nicht auf, Unterklassen zu bilden.
Überprüfe den Konstruktor für die Klasse:
%Vor%Dann kann niemand die Unterklasse Ihrer Klasse instanziieren.
(Nicht, dass ich vorschlage, diese Techniken zu verwenden, es kam mir gerade in den Sinn. Ich würde den letzten Klassen- und / oder privaten Konstruktor verwenden)
Verwenden Sie einen Kommentar:
%Vor%Verwenden Sie einen Javadoc-Kommentar
Verwenden Sie eine Laufzeitprüfung im Klassenkonstruktor:
%Vor% Die Verwendung von final
ist der kanonische Weg.
Wenn Sie verhindern möchten, dass einzelne Methoden überschrieben werden, können Sie sie stattdessen als final deklarieren. (Ich rate nur hier, warum Sie vermeiden sollten, die ganze Klasse zum Abschluss zu bringen.)
Machen Sie Ihre Konstruktoren privat und stellen Sie Factory-Funktionen bereit, um Instanzen zu erstellen.
Dies kann besonders hilfreich sein, wenn Sie eine geeignete Implementierung aus mehreren auswählen möchten, aber keine beliebige Unterklasse wie in
zulassen möchten %Vor%Ich muss sagen, dass es normalerweise eine schlechte Form ist. Obwohl es fast immer Fälle gibt, in denen etwas gültig ist, würde ich sagen müssen, dass die Vererbung in einer OO-Welt normalerweise keine gute Idee ist. Lesen Sie das Open-Closed-Prinzip und hier . Schützen Sie Ihre Funktionalität, aber machen Sie es nicht unmöglich für den Typ, der hereinkommt und es unterstützt ...
Ohne eine letzte Klasse zu verwenden, können Sie grundsätzlich alle Konstruktoren als privat definieren:
%Vor% Was diese Klasse auch abstrahiert, indem sie das Erstellen eines Objekts dieser Klasse verbietet, aber da jede Vererbung im Konstruktor super();
erfordert und weil der Konstruktor privat ist, ist ein Kompilierungsfehler das Maximum, das Sie haben können get, wenn man versucht, diese Klasse zu erben.
Ich würde jedoch empfehlen, final zu verwenden, da es weniger Code enthält und die Option zum Erstellen von Objekten enthält.
Tags und Links java inheritance