final in Java wird verwendet für:
Merkmale und Feinheiten:
final Variable muss bei der Deklaration oder im Konstruktor initialisiert werden;final Referenz erlaubt es nicht, die Referenz zu ändern, aber das Objekt durch die Referenz kann verändert werden (wenn es nicht immutable ist!);final Klasse (z. B. String, Math) ist unmöglich;final Methode kann nicht überschrieben werden, selbst wenn die Klasse vererbt ist.final class A {} // kann nicht class B extends A gemacht werden class Parent { final void foo() { } } class Child extends Parent { // void foo() {} // Fehler: kann foo nicht zurückgeben } final int COUNT = 10;
Kann der Zustand eines Objekts, auf das eine final Variable verweist, geändert werden?
Antwort: Ja, wenn es sich nicht um ein immutable-Objekt handelt. Beispiel:
final List<String> names = new ArrayList<>(); names.add("Vasya"); // Dies ist erlaubt – das Objekt über die Referenz wird verändert, nicht die Referenz selbst names = new ArrayList<>(); // Kompilierungsfehler
Geschichte
Geschichte
Geschichte
Es entstand die Aufgabe, die externe API zu erweitern, die auf final Klassen basierte. Aufgrund dieser war es unmöglich, eine Erweiterung vorzunehmen, und es musste die Logik dupliziert und zwei unabhängige Produktlinien unterstützt werden, was Migrationen erschwerte.