Quando usar @Override afinal?

Sendo que funciona com ou sem (apenas quando não coloco fica um Warning…)

?

Toda a vez que você sobrescrever um método da classe pai.

Funciona com ou sem caso estiver sobrescrevendo corretamente, agora o uso do @Override garante que vc não vai sobrescrever algo que vc não herdou, pois o compilador vai chorar…

“Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.”

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Override.html

[code]package br.sobreescrita;

class A {
public void procrastinar(int minutos, String atividade ){ }
}

class B extends A{
//@Override
public void procrastinar(String atividade, int minutos ){ }
}
public class Exemplo{
public static void main(String [] xxx){
B b = new B();
b.procrastinar(“implementar sistema X”, 60);
b.procrastinar(20, “criar massa dados”);
}
}[/code]

Se vc não usa @Override, vc faz uma coisa dessas: acredita que B está sobreescrevendo um método em A, porém apenas criou uma nova assinatura, mantendo o antigo método. Se vc usa, acontece isso:

The method procrastinar(String, int) of type B must override a superclass method	sobreescrita/br/sobreescrita

Ou seja, o compilador te avisa “magrão, ACORDA q tu não está sobreescrevendo método coisissima nenhuma, tu comeu mosca, ficou olhando aquela secretária boazuda passando pelo corredor e escrever a primeira coisa q veio na mente”.