A anotação @Override é como o Sharingan do Java:
👉 vê além, detecta erros escondidos e evita que você caia em armadilhas de código.
Usar @Override não é obrigatório, mas é fortemente recomendado — especialmente em herança e polimorfismo.
@Override faz?| Função | Explicação |
|---|---|
| ✔️ Confirma a sobrescrita | Garante que o método existe na superclasse ou interface |
| ⚠️ Evita erros silenciosos | Identifica métodos com nome errado ou assinatura diferente |
| 👁️ Facilita leitura e manutenção | Desenvolvedores entendem imediatamente a intenção |
| 🛡️ Protege ao refatorar | Se a superclasse muda, você descobre na hora |
@Overrideclass Ninja {
void realizarJutsu() {
System.out.println("Ninja realiza um jutsu genérico.");
}
}
class Uzumaki extends Ninja {
@Override
void realizarJutsu() {
System.out.println("Naruto usa Rasengan!");
}
}
class Uzumaki extends Ninja {
void realizarjustu() { // ERRO: nome errado!
System.out.println("Naruto usa Rasengan!");
}
}
Resultado:
⚠️ O método da superclasse NÃO é sobrescrito.
⚠️ O compilador não te avisa.
⚠️ O comportamento polimórfico quebra.
Assim, se você fizer:
Ninja n = new Uzumaki();
n.realizarJutsu();
➡️ Ele vai chamar o método da superclasse, não o da subclasse.
Sem @Override, você nunca saberia o porquê.