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?

15voto

Sean Patrick Floyd Punkte 283617

Relevante Lektüre: Das Offen-Schließend-Prinzip von Bob Martin.

Schlüsselzitat:

Software-Entitäten (Klassen, Module, Funktionen, etc.) sollten offen sein für Erweiterung, aber geschlossen für Modifikation.

Le final Schlüsselwort ist das Mittel, um dies in Java zu erzwingen, egal ob es für Methoden oder für Klassen verwendet wird.

14voto

akhil_mittal Punkte 20953

Das Schlüsselwort final selbst bedeutet, dass etwas endgültig ist und in keiner Weise geändert werden darf. Wenn eine Klasse als final dann kann sie nicht erweitert oder unterklassifiziert werden. Die Frage ist aber, warum wir eine Klasse als final ? IMO gibt es dafür verschiedene Gründe:

  1. Standardisierung: Einige Klassen führen Standardfunktionen aus, die nicht geändert werden sollen, z. B. Klassen, die verschiedene Funktionen im Zusammenhang mit Stringmanipulationen oder mathematischen Funktionen usw. ausführen.
  2. Sicherheitsgründe : Manchmal schreiben wir Klassen, die verschiedene Authentifizierungs- und Kennwortfunktionen ausführen, und wir wollen nicht, dass sie von jemand anderem geändert werden.

Ich habe gehört, dass die Benotung der Klasse final die Effizienz verbessert, aber ehrlich gesagt konnte ich diesem Argument nicht viel Gewicht beimessen.

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

Vielleicht ja, aber manchmal ist das der beabsichtigte Zweck. Manchmal tun wir das, um größere Vorteile bei der Sicherheit usw. zu erreichen, indem wir die Fähigkeit dieser Klasse, erweitert zu werden, opfern. Aber eine finale Klasse kann immer noch eine Klasse erweitern, wenn sie es muss.

Nebenbei bemerkt sollten wir Komposition der Vererbung vorziehen y final Schlüsselwort hilft bei der Durchsetzung dieses Grundsatzes.

13voto

final class können Sie vermeiden, die öffentliche API zu zerstören, wenn Sie neue Methoden hinzufügen

Nehmen wir an, dass bei Version 1 Ihrer Base Klasse, die Sie tun:

public class Base {}

und ein Kunde tut es:

class Derived extends Base {
    public int method() { return 1; }
}

Wenn Sie dann in Version 2 eine method Methode zu Base :

class Base {
    public String method() { return null; }
}

es würde den Client-Code zerstören.

Hätten wir die final class Base wäre der Client nicht in der Lage gewesen, zu erben, und das Hinzufügen der Methode hätte die API nicht beschädigt.

9voto

Kavinda Pushpitha Punkte 219

In Java wird das finale Schlüsselwort bei folgenden Gelegenheiten verwendet.

  1. Endgültige Variablen
  2. Endgültige Methoden
  3. Letzte Klassen

In Java können finale Variablen nicht neu zugewiesen werden, letzte Klassen kann nicht erweitert werden und finale Methoden können nicht überschrieben werden.

9voto

JuanZe Punkte 7773

Eine finale Klasse ist eine Klasse, die nicht erweitert werden kann. Auch Methoden können als final deklariert werden, um anzuzeigen, dass sie von Unterklassen nicht überschrieben werden können.

Das Verhindern der Unterklassifizierung der Klasse kann besonders nützlich sein, wenn Sie APIs oder Bibliotheken schreiben und vermeiden wollen, dass diese erweitert werden, um das Basisverhalten zu ändern.

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