Olá desenvolvedores, hoje falaremos sobre a anotação @override e a reescrita de métodos. A anotação @override é uma forma de garantir que estamos na verdade sobrescrevendo um método e não criando um novo. Em nossos exemplos a temos visto quando geramos um método toString() ou equals() e hashCode().
Na prática vamos ver como isso acontece, criaremos na superclasse Pessoa um método que retornará um boolean. Será um método simples que retornará se o aluno é ou não menor de idade. Embora simples, será o suficiente para o seu entendimento acerca de como funciona a “annotation @Override”. Eis a assinatura do método que iremos criar.
Public boolean pessoaMaiorIdade(){
return idade >= 18;
}
Se a pessoa em questão tiver idade maior ou igual a 18, retornará um true. Se não, se idade da pessoa for menor que 18, retornará um false. Agora, na classe implementada no tutorial anterior para testar as classes filhas, atribua uma idade para o aluno, diretor e secretário.
Entretanto, dentro de cada objeto colocaremos um “retorno” distinto do método original. Assim, no método main, chamaremos o método pessoaMaiorIdade() para cada um dos objetos.
Um ponto interessante é que conseguimos criar o método uma única vez, e o mesmo poderá ser utilizado por qualquer um dos objetos. E isso porque o implementamos na classe Pessoa – a superclasse, que é estendida por todas as classes filhas.
aluno.pessoaMaiorIdade();
diretor.pessoaMaiorIdade();
secretario.pessoaMaiorIdade();
SOBRESCREVENDO O MÉTODO
O próximo passo será chamar o método pessoa em cada uma das respectivas classes, sobrescrevendo-o. Começaremos com a classe Aluno. Lembre-se de utilizar o autocomplete. Na IDE Eclipse, digite a primeira sílaba, pressione a tecla CTRL e dê um toque na BARRA DE ESPAÇO.
Observe que o uso da palavra reservada super indica que o método está sendo chamado diretamente da superclasse.
E ainda, na classe principal, se você pressionar a tecla CTRL e clicar sobre o método pessoaMaiorIdade(), porque sobrescrevemos o método, seremos redirecionados para a classe Aluno. Mas se deletarmos o método da classe Aluno e procedermos do mesmo jeito, seremos então redirecionados para a classe Pessoa.
Agora podemos fazer o que quisermos dentro do método sobrescrito, podemos por exemplo, mudar a regra de negócio. Isto é, alterar a maior idade, no lugar de 18, para devidos fins agora será maior de idade a pessoa que tiver 21 anos ou mais.
Assim, junto com a alteração da maior idade, implementaremos um segundo método dentro da classe Aluno, onde reaproveitaremos o método pessoaMaiorIdade(). Neste método que retornará uma String, utilizaremos o this para referenciar o objeto. Assim, chamaremos o método citado e recorreremos ao operador ternário para estabelecer a condição de exibição da mensagem.
A chama do método referente ao Aluno, deverá ser acrescida da chamada do método msgMaiorIdade(). veja abaixo:
System.out.println(aluno+ " | " +aluno.msgMaiorIdade());
A saída do que acabamos de implementar será como mostra a imagem abaixo. Em destaque a saída do método sobrescrito.
EM POUCAS PALAVRAS
Dessa forma utilizando conceitos da anotação @override poderemos implementar quantos métodos desejarmos, utilizando os atributos seja da própria superclasse ou da classe filha. E assim, reutilizar um método já escrito na classe base.
Porém, não é necessário ficar preso a uma única regra de negócio. Visto que cada objeto poderá apresentar necessidades distintas de implementação desta regra. Ou ainda, outras precisem ser adicionadas a ela. Enfim, as possibilidades são inúmeras.
Então agora deixo com você o desafio da implementação da sobrescrita do método para as classes “Secretario” e “Diretor”. Nos vemos no próximo tutorial.