Classes abstratas java
"Dá-se importância aos antepassados quando já não temos nenhum."
Ao término desse capítulo, você será capaz de utilizar classes abstratas, quando necessário.
9.1 - Repetindo mais código?
Neste capítulo, aconselhamos que você passe a usar o Eclipse. Você já tem conhecimento suficiente dos erros de compilação do javac e agora pode aprender as facilidades que o Eclipse te traz ao ajudar você no código com os chamados quick fixes e quick assists.
Vamos recordar em como pode estar nossa classe Funcionario:
class Funcionario {
protected String nome; protected String cpf; protected double salario;
public double getBonificacao() { return this.salario * 1.2; }
// outros métodos aqui
}
Considere o nosso ControleDeBonificacao:
class ControleDeBonificacoes {
private double totalDeBonificacoes = 0;
public void registra(Funcionario f) { System.out.println("Adicionando bonificação do " + "funcionario: " + f); this.totalDeBonificacoes += f.getBonificacao(); }
public double getTotalDeBonificacoes() { return this.totalDeBonificacoes; }
}
Nosso método registra recebe qualquer referência do tipo Funcionario, isto é, podem ser objetos do tipo Funcionario e qualquer de seus subtipos: Gerente, Diretor e, eventualmente, alguma nova subclasse que venha ser escrita, sem prévio conhecimento do autor da ControleDeBonificacao.
Estamos utilizando aqui a classe Funcionario para o polimorfismo. Se não fosse ela, teríamos um grande prejuízo: precisaríamos criar um método registra para receber cada um dos tipos de Funcionario, um para Gerente, um para Diretor, etc. Repare que perder esse poder é muito pior do que a pequena vantagem que a herança traz em herdar código.
Porém, em alguns sistemas, como é o nosso caso, usamos uma classe com apenas esses intuitos: de economizar um pouco código e ganhar polimorfismo para criar métodos mais genéricos, que se encaixem