🔶 O que é final?

O modificador final em Java é usado para declarar que um elemento (variável, método ou classe) não pode ser modificado após sua atribuição. Ele pode ser aplicado a variáveis, métodos e classes.


🔶 Variáveis final

🔹 Declaração e Uso

Uma variável marcada como final não pode ter seu valor alterado após ser inicializada. Para tipos primitivos, isso significa que o valor não pode mudar, e para objetos, que a referência não pode ser alterada (embora o estado do objeto ainda possa mudar).

final int valor = 10;
valor = 20; // Erro de compilação: não é permitido alterar o valor

final Pessoa pessoa = new Pessoa();
pessoa = new Pessoa(); // Erro: não pode alterar a referência
pessoa.setNome("Novo Nome"); // Válido: o estado interno pode mudar

🔶 Métodos final

🔹 Declaração e Uso

Um método final não pode ser sobrescrito (override) por subclasses. Isso garante que o comportamento do método não será alterado em classes derivadas.

public class Exemplo {
    public final void metodoFinal() {
        System.out.println("Este método não pode ser sobrescrito");
    }
}

class SubExemplo extends Exemplo {
    // Erro: não é possível sobrescrever o método
    public void metodoFinal() {
        System.out.println("Tentativa de sobrescrever");
    }
}

🔶 Classes final

🔹 Declaração e Uso

Uma classe final não pode ser estendida (herdada). Isso é útil quando você quer evitar que alguém crie subclasses dessa classe.

public final class ClasseFinal {
    // Conteúdo da classe
}

class SubClasse extends ClasseFinal {
    // Erro: não é possível herdar de uma classe final
}