Sobes.tech
Junior

Cosa significa la parola chiave 'final' nel linguaggio di programmazione Java?

sobes.tech AI

Risposta dell'AI

La parola chiave final in Java viene utilizzata per indicare che una variabile, un metodo o una classe non possono essere modificati.

  1. Variabile final:

    • A una variabile dichiarata come final, il suo valore può essere assegnato una sola volta. Dopo l'assegnazione, non può essere modificato.
    • Per i tipi di dati primitivi, il valore di una variabile final è una costante.
    • Per i tipi di dati referenziali, final significa che il riferimento all'oggetto non può essere cambiato, ma lo stato dell'oggetto (i suoi campi) può essere modificato (a meno che i campi stessi dell'oggetto siano final).
    final int MAX_VALUE = 100; // variabile primitiva finale
    
    final List<String> names = new ArrayList<>(); // variabile di riferimento finale
    names.add("Alice"); // OK
    // names = new ArrayList<>(); // Errore di compilazione - impossibile riassegnare il riferimento
    
  2. Metodo final:

    • Un metodo dichiarato come final non può essere sovrascritto nelle sottoclassi.
    • Questo viene usato per prevenire modifiche indesiderate al comportamento nella gerarchia di ereditarietà.
    class Parent {
        final void display() {
            System.out.println("Questo è un metodo finale.");
        }
    }
    
    class Child extends Parent {
        // @Override void display() { } // Errore di compilazione - impossibile sovrascrivere un metodo finale
    }
    
  3. Classe final:

    • Una classe dichiarata come final non può avere sottoclassi (non può essere ereditata).
    • Questo viene usato per garantire l'immutabilità della classe e prevenire l'estensione della sua funzionalità.
    final class ImmutableClass {
        private final int value;
    
        public ImmutableClass(int value) {
            this.value = value;
        }
    
        public int getValue() {
            return value;
        }
    }
    
    // class TryingToExtend extends ImmutableClass { } // Errore di compilazione - impossibile ereditare da una classe final