Pergunta

Ao substituir um método não-virtual em Java, o uso da anotação @Override é recomendado, mas o que se eu implementar um método abstrato? Devo usar @Override seguida também?

Foi útil?

Solução

I tendem a preferir o uso de @Override neste caso, para que o método é sinalizado nas subclasses se as mudanças superclasse (quer removendo o método completamente, nem modificar a sua assinatura, etc.).

A única diferença real é que, sem a anotação, se o método na superclasse / interface é alterada ou removida, a implementação em questão torna-se simplesmente um método "normal" dessa classe. Assim, você deve adicionar a anotação, se você está implementando o método apenas para cumprir o contrato; e você provavelmente não deve adicioná-lo se o método faz sentido em sua classe, independentemente de quaisquer interfaces implementadas ou herdadas métodos abstratos.

Outras dicas

Sim - novamente, ele diz ao compilador, "Eu realmente quero ser substituir um método aqui Se houver não um método correspondente a substituição, eu cometi um erro e quer. ser dito sobre ele! "

Pessoalmente eu acho que é uma pena que esta é apenas uma anotação em vez de parte da linguagem (como é em C #), mas isso é o benefício da retrospectiva, é claro.

Sim. É prática recomendada por Joshua Bloch em Effective Java.

Na verdade, Joshua Bloch, no último parágrafo da página 178 em Effective Java (2ª Ed.) , diz que não é essencial para métodos de classes concretas que substituem métodos abstratos para usar a anotação Override porque o compilador daria um erro de qualquer maneira. No entanto, "não é prejudicial para fazê-lo".

Eu recomendo escolher uma estratégia e ficar com ele de forma consistente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top