Olá desenvolvedores falaremos hoje sobre classes e métodos abstratos, que recebem o modificador abstract. Tais métodos devem obrigatoriamente serem sobrescritos em uma relação de herança. Do contrário um erro em tempo de compilação será gerado.
CLASSE ABSTRATA
É importante observar que se uma classe define métodos abstract, a classe também deverá ser definida como abstrata. A intenção da abstração é servir como um “modelo”, entretanto, não podemos trabalhar diretamente com uma classe abstrata.
E ainda, como classes abstratas não podem ser instanciadas, elas não podem ser chamadas de modelos. Dessa forma e por este motivo é que falamos que ela é uma abstração. Assim sendo, temos que classes abstratas apenas definem o comportamento das classes filhas.
O Diagrama de classes acima, mostra a superclasse Pessoa e suas respectivas classes filhas, Aluno, Diretor, Secretario. Entretanto, Pessoa é o modelo generalizado que agrega características comuns aos demais objetos. Estes objetos criados a partir da classe Pessoa, são representações mais específicas.
Assim, sobre a abstração a literatura define classe abstrata como sendo “uma abstração de uma entidade. Seja esta entidade física (pessoa, carro, personagem) ou conceitual (venda, viagem, tipo de pagamento)”.
Dessa forma, usando a palavra chave abstract, a classe é impedida de ser instanciada. Sendo este o efeito direto de usar o modificador abstract na assinatura de uma classe. Então, em nosso exemplo a classe Pessoa deverá receber esta “nomenclatura”.
public abstract class Pessoa {}
Feito isso a classe não poderá mais ser instanciada. Faça o teste e veja que a ferramenta acusará um erro. A própria IDE se encarregará de bloquear esta ação. Mas entenda, Como a classe Pessoa é abstrata, ela somente não pode ser instanciada a partir dela mesma.
Pessoa pessoa = new Pessoa();
Entretanto, uma variável do tipo Pessoa poderá receber a instância de uma classe que estende a classe Pessoa.
Pessoa pessoa = new Aluno();
MÉTODOS ABSTRATOS
E por que existem métodos abstratos? Os métodos abstratos são úteis quando for necessário garantir que determinado método seja sobrescrito. Isto é, é uma forma de garantir que todas as classes filhas escrevam o método. Essa característica é muito utilizada pelos procedimentos de tratamento de eventos.
Dessa forma, este método indica que todas as classes filhas (concretas, isto é, que não forem abstratas) devem reescrever este método ou não compilarão. Como se as classes filhas tivessem herdado também a obrigação de implementar o método.
Métodos abstratos obrigatoriamente devem ficar dentro da classe abstrata. Eles não possuem instruções. E para escrevê-los, utilizamos um ponto e vírgula (;). Nenhum sinal de chaves {} deve ser utilizado.
Public abstract double salario();
E como um método abstract obriga as subclasses a implementá-lo, é o que iremos fazer agora. Basta clicar onde o Eclipse acusa o erro, e adicionar o método. Ele será adicionado ao final do bloco de código.
Repita o procedimento com todas as classes filhas. E em cada uma das implantações poderemos proceder com regras de negócios distintas. Dessa forma podemos estabelecer uma bolsa de estudos para o aluno no valor de R$ 1200.00. Ao passo que para o diretor definiremos um salário de 3785.25, e para o secretário, atribuiremos um salário de 1850.75.]
public double salario(){
return 1850.75;
}
A saída da implementação do método fica como mostrado abaixo
EM POUCAS PALAVRAS
A classe Pessoa foi criada somente para ser estendida para que seus recursos sejam reutilizados pelas subclasses Aluno, Diretor e Secretário? Você pode estar se perguntando. E a resposta é não. O modificador de acesso abstract é usado para que haja no sistema uma lógica de modelagem, acesso e visibilidade durante a sua implementação.
Espero que tenham gostado e entendido como implementar a aplicação de classes e métodos abstratos.