Sobes.tech
Junior

Was bedeutet das Schlüsselwort 'final' in der Programmiersprache Java?

sobes.tech KI

Antwort von AI

Das Schlüsselwort final in Java wird verwendet, um anzugeben, dass eine Variable, Methode oder Klasse nicht geändert werden kann.

  1. final Variable:

    • Einer als final deklarierten Variablen kann nur einmal ein Wert zugewiesen werden. Nach der Zuweisung kann sie nicht mehr geändert werden.
    • Für primitive Datentypen ist der Wert einer final Variablen eine Konstante.
    • Für Referenztypen bedeutet final, dass die Referenz auf das Objekt nicht geändert werden kann, aber der Zustand des Objekts (seine Felder) kann geändert werden (sofern die Felder des Objekts nicht ebenfalls final sind).
    final int MAX_VALUE = 100; // finale primitive Variable
    
    final List<String> names = new ArrayList<>(); // finale Referenzvariable
    names.add("Alice"); // OK
    // names = new ArrayList<>(); // Kompilierungsfehler - Referenz kann nicht neu zugewiesen werden
    
  2. final Methode:

    • Eine als final deklarierte Methode kann in Unterklassen nicht überschrieben werden.
    • Dies wird verwendet, um unerwünschte Änderungen des Verhaltens in der Vererzungshierarchie zu verhindern.
    class Parent {
        final void display() {
            System.out.println("Dies ist eine finale Methode.");
        }
    }
    
    class Child extends Parent {
        // @Override void display() { } // Kompilierungsfehler - finale Methode kann nicht überschrieben werden
    }
    
  3. final Klasse:

    • Eine als final deklarierte Klasse kann keine Unterklassen haben (kann nicht vererbt werden).
    • Dies wird verwendet, um die Unveränderlichkeit der Klasse zu gewährleisten und die Erweiterung ihrer Funktionalität zu verhindern.
    final class ImmutableClass {
        private final int value;
    
        public ImmutableClass(int value) {
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    }
    
    // class TryingToExtend extends ImmutableClass { } // Kompilierungsfehler - kann nicht von einer finalen Klasse erben