Classe Abstrata

Propaganda
Classe Abstrata
A abstração está associada ao grau de detalhe ou de especificação do projeto de uma classe.
Superclasses estão em um nível de abstração mais alto do que as subclasses.
O que, exatamente, vem a ser uma classe Funcionário? Uma empresa tem Diretores, Gerentes,
Secretárias, etc. Ela é uma classe(funcionario) que apenas idealiza um tipo, define apenas um
rascunho.
abstract class Funcionario
{
protected double salario;
protected String nome;
public Funcionario(String nome){
this.nome = nome;
salario= 1000;
}
public double getBonificacao() {
return this.salario * 1.2;
}
public String toString(){
return "Funcionário: "+nome+"\nSalário: "+salario+"\n";
}
}
Usamos a palavra chave abstract para impedir que ela possa ser instanciada. Esse é o efeito
direto de se usar o modificador abstract na declaração de uma classe:
public static void main(String[] args) {
Funcionario func;
func = new Funcionario("João"); //ERRO – não compila!!
}
O código acima não compila. O problema é instanciar a classe - criar referência, você pode.
Se ela não pode ser instanciada, para que serve? Somente para o polimorfismo e herança dos
atributos e métodos.
Vamos então herdar da superclasse Funcionario, reescrevendo o método getBonificacao() na
subclasse Gerente:
Subclasse: Gerente.java
public class Gerente extends Funcionario{
public Gerente(String nome) {
super(nome);
}
public double getBonificacao() {
return this.salario * 1.2;
}
}
Métodos Abstratos
Obriga a sua implementação na subclasse(observe a subclasse Gerente).
Superclasse: Funcionario.java
abstract class Funcionario
{
protected double salario;
protected String nome;
public Funcionario(String nome){
this.nome = nome;
salario= 1000;
}
public abstract double getBonificacao();
public String toString(){
return "Funcionário: "+nome+"\nSalário: "+salario+"\n";
}
}
Observações:
•
Uma classe abstrata não pode ser instanciada;
•
A subclasse deve implementar todos os métodos abstratos;
•
Uma classe abstrata pode conter métodos não abstratos;
•
Caso a subclasse não implemente todos os métodos abstratos então ela também será
considerada abstrata.
Crie a superclasse Funcionario, sublcasse Gerente e a classe TestaAbstract definida abaixo:
Classe: TestaAbstract.java
public class TestaAbstract {
public static void main(String[] args) {
Funcionario func;
Gerente g;
//func = new Funcionario("João"); //ERRO – não compila!!
g = new Gerente("João");
System.out.print(g.toString());
System.out.println(g.getBonificacao());
}
}
Download