691 Stimmen

Was ist der Sinn von "final class" in Java?

Ich lese ein Buch über Java und es sagt, dass Sie die gesamte Klasse als deklarieren können final . Ich kann mir nicht vorstellen, wo ich das verwenden würde.

Ich bin noch neu im Programmieren und frage mich wenn Programmierer dies tatsächlich in ihren Programmen verwenden . Wenn ja, wann verwenden sie es, damit ich es besser verstehen und wissen kann, wann ich es verwenden muss.

Wenn Java objektorientiert ist, und Sie eine Klasse deklarieren final Wird dadurch nicht die Idee, dass Klassen die Eigenschaften von Objekten haben, aufgegeben?

633voto

aioobe Punkte 397211

Zunächst einmal empfehle ich diesen Artikel: Java: Wann man eine finale Klasse erstellt


Wenn ja, wann verwenden sie es, damit ich es besser verstehen und wissen kann, wann ich es einsetzen muss.

A final Klasse ist einfach eine Klasse, die kann nicht verlängert werden .

(Das bedeutet nicht, dass sich alle Verweise auf Objekte der Klasse so verhalten würden, als wären sie als final .)

Wann es sinnvoll ist, eine Klasse als final zu deklarieren, wird in den Antworten zu dieser Frage behandelt:

Wenn Java objektorientiert ist, und Sie eine Klasse deklarieren final Wird dadurch nicht die Idee, dass Klassen die Eigenschaften von Objekten haben, aufgegeben?

In gewissem Sinne ja.

Indem Sie eine Klasse als endgültig markieren, deaktivieren Sie eine leistungsstarke und flexible Funktion der Sprache für diesen Teil des Codes. Einige Klassen sollten jedoch nicht (und in bestimmten Fällen puede nicht) so konzipiert sein, dass sie die Unterklassenbildung in angemessener Weise berücksichtigen. In diesen Fällen ist es sinnvoll, die Klasse als final zu kennzeichnen, auch wenn dies die OOP einschränkt. (Denken Sie jedoch daran, dass eine finale Klasse immer noch eine andere nicht-finale Klasse erweitern kann).

208voto

andyqee Punkte 3019

In Java werden Elemente mit der final Modifikator kann nicht geändert werden!

Dazu gehören endgültige Klassen, endgültige Variablen und endgültige Methoden:

  • Eine endgültige Klasse kann durch keine andere Klasse erweitert werden.
  • Einer Endvariablen kann kein anderer Wert zugewiesen werden
  • Eine endgültige Methode kann nicht außer Kraft gesetzt werden

41voto

Shay Rojansky Punkte 13283

Ein Szenario, in dem die Endfassung wichtig ist, wenn Sie Vererbung verhindern einer Klasse, aus Sicherheitsgründen. So können Sie sicherstellen, dass der Code, den Sie ausführen kann nicht außer Kraft gesetzt werden von jemandem.

Ein anderes Szenario dient der Optimierung: Ich glaube mich daran zu erinnern, dass der Java-Compiler einige Funktionsaufrufe aus finalen Klassen inlinespeichert. Also, wenn Sie aufrufen a.x() und a wird erklärt final wissen wir zur Kompilierzeit, wie der Code aussehen wird und können ihn in die aufrufende Funktion einfügen. Ich habe keine Ahnung, ob dies tatsächlich gemacht wird, aber mit final ist es eine Möglichkeit.

29voto

javadeveloper Punkte 773

Das beste Beispiel ist

public final class String

die eine unveränderliche Klasse ist und nicht erweitert werden kann. Natürlich reicht es nicht aus, die Klasse final zu machen, um unveränderlich zu sein.

24voto

biziclop Punkte 47795

Stellt man sich die Klassenhierarchie als Baum vor (wie in Java), so können abstrakte Klassen nur Zweige sein, während finale Klassen nur Blätter sein können. Klassen, die in keine dieser beiden Kategorien fallen, können sowohl Zweige als auch Blätter sein.

Hier liegt kein Verstoß gegen die OO-Prinzipien vor, sondern das Finale sorgt einfach für eine schöne Symmetrie.

In der Praxis sollten Sie final verwenden, wenn Sie möchten, dass Ihre Objekte unveränderlich sind, oder wenn Sie eine API schreiben, um den Benutzern der API zu signalisieren, dass die Klasse nicht für eine Erweiterung vorgesehen ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X