Palavra-chave final em Java

A palavra-chave final em Java tem vários usos, dependendo de onde ela é aplicada. Ela pode ser usada com variáveis, métodos e classes, garantindo diferentes tipos de comportamento.

1. final com Variáveis

Quando a palavra-chave final é usada com variáveis, isso significa que o valor da variável não pode ser alterado depois de atribuído. Em outras palavras, ela se torna uma constante.

Sintaxe

final int constante = 10;

Exemplo

public class ExemploFinalVariavel {
public static void main(String[] args) {
final int numero = 100;
// numero = 200; // Isso causaria um erro de compilação, pois a variável é final.
System.out.println("O valor de numero é " + numero);
}
}

Explicação:

  • A variável numero foi declarada como final, o que significa que, após receber o valor 100, ela não pode mais ser alterada.

2. final com Métodos

Quando um método é declarado como final, ele não pode ser sobrescrito por subclasses. Isso é útil quando você deseja garantir que a implementação de um método não será modificada em uma classe filha.

Sintaxe

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

Exemplo

class Animal {
public final void fazerSom() {
System.out.println("O animal faz um som");
}
}

class Cachorro extends Animal {
// public void fazerSom() { // Isso causaria um erro de compilação
// System.out.println("O cachorro late");
// }
}

public class ExemploFinalMetodo {
public static void main(String[] args) {
Cachorro dog = new Cachorro();
dog.fazerSom(); // Exibe "O animal faz um som"
}
}

Explicação:

  • O método fazerSom() na classe Animal foi declarado como final, então ele não pode ser sobrescrito pela classe Cachorro.

3. final com Classes

Quando uma classe é declarada como final, ela não pode ser estendida. Isso significa que nenhuma outra classe pode herdar de uma classe final. Isso é feito para evitar que alguém modifique o comportamento da classe.

Sintaxe

final class ClasseFinal {
// Código da classe
}

Exemplo

final class Veiculo {
public void dirigir() {
System.out.println("Dirigindo o veículo");
}
}

// class Carro extends Veiculo { // Isso causaria um erro de compilação
// // Código da classe
// }

public class ExemploFinalClasse {
public static void main(String[] args) {
Veiculo v = new Veiculo();
v.dirigir(); // Exibe "Dirigindo o veículo"
}
}

Explicação:

  • A classe Veiculo foi marcada como final, então nenhuma outra classe, como Carro, pode herdar dela.

Resumo do final

  • final com variáveis: Torna a variável uma constante. Seu valor não pode ser alterado após a atribuição.
  • final com métodos: Evita que o método seja sobrescrito em subclasses.
  • final com classes: Impede que a classe seja estendida.

O uso do final em Java é importante para garantir que certas partes do código permaneçam imutáveis ou inalteráveis, ajudando a criar programas mais seguros e robustos.