Linguagem IIClasses Abstratas
Interfaces
Davi Pires {[email protected]}
Revisão
• Reuso de código• Superclasses e subclasses• Composição vs. Herança• Construtores
– super• Sobrescrevendo métodos• Casts
– erro: ClassCastException• instanceof
Davi Pires {[email protected]}
Um exemplo...
• Herança e polimorfismo– Caso extremo: classes inúteis!
Professor ProfessorDaPos
ProfessorDaGraduacao
ProfessorAdjunto
class Professor {
double getSalario( ) { //... }}
Davi Pires {[email protected]}
Métodos abstratos
• Podemos especificar quais métodos não sabemos implementar na classe.
• Assim, obrigamos as subclasses a implementá-los.
• Palavra reservada abstract.
Davi Pires {[email protected]}
Métodos abstratos
class Professor {
abstract double getSalario( );
}
class ProfessorDaPos extends Professor {
public double getSalario( ) { return 2500.00; }
}
class ProfessorAdjunto extends Professor {
public double getSalario( ) { return 1500.00; }
}
Davi Pires {[email protected]}
Classes abstratas
• Contêm métodos abstratos.• Nunca serão instanciadas.• São declaradas usando a palavra
reservada abstract.
Se uma classe tem pelo menos um método abstrato, ela deve ser declarada abstract,
ou teremos um erro de compilação!
Davi Pires {[email protected]}
Classes Abstratas
abstract class Professor {
abstract double getSalario( );
}
class ProfessorDaPos extends Professor {
public double getSalario( ) { return 2500.00; }
}
class ProfessorAdjunto extends Professor {
public double getSalario( ) { return 1500.00; }
}
Davi Pires {[email protected]}
Classes Abstratas
• Exemplo
Professor professor;professor = new Professor( );
professor = new ProfessorAdjunto( );
Davi Pires {[email protected]}
Classes Abstratas
• Subclasses que não implementam o método abstrato também são abstract.
abstract class Professor {
abstract double getSalario( );
}
abstract class ProfessorGraduacao extends Professor {
//...
}
Davi Pires {[email protected]}
Classes Abstratas
• Exemplo:– Professor*.java
• Exercício– Faça um método main e teste.– Faça com que todo Professor tenha um
atributo nome que deve ser passado no construtor.
– Crie um novo tipo de ProfessorGraduacao e insira-o no projeto.
Davi Pires {[email protected]}
Considerações
• Extensibilidade.• Flexibilidade.• Classes abstratas permitem-nos abstrair
partes da implementação.• E se quiséssemos abstrair toda a
implementação?
Davi Pires {[email protected]}
Considerações
• Uma classe abstrata define uma interface a ser necessariamente implementada por suas subclasses.
• E se nos interessasse definir apenas o que deve ser implementado?– definir apenas a interface!
• Exemplo:– Repositórios– Servidores
Davi Pires {[email protected]}
Interfaces
• Em Java, podemos definir interfaces.• São um novo tipo.
interface Exemplo {
public void a(..);
public void b(..);
}
Davi Pires {[email protected]}
Interfaces
• Por serem tipos, podem ser usados como tipos de variáveis, atributos ou retorno de métodos.
interface RepositorioX {
public void inserir(X novoX); public void remover(..);
}
class CadastroX {
RepositorioX repositorio;
void inserirX(X novoX) { repositorio.inserir(x); }}
Davi Pires {[email protected]}
Interfaces
• Interfaces não fazem nada.– além de definir o que deve ser feito.– “Contratos”.
• Classes devem implementar os métodos ali definidos.
• Palavra reservada implements• Uma classe pode implementar diversas
interfaces.– Embora só estenda uma classe.
Davi Pires {[email protected]}
Implementando interfaces
interface RepositorioX {
public void inserir(X novoX); public void remover(..);
}
class RepositorioX implements Repositorio X{
public void inserir(X novoX) { //... } public void remover(..) { //... }}
Davi Pires {[email protected]}
Implementando interfaces
• Se
• Então
• ou
class A implements InterfaceB {...}
A implementa todos os métodos de InterfaceB
A é declarada como abstract
Davi Pires {[email protected]}
Dúvidas
Davi Pires {[email protected]}
Exercícios
• Em CadastroContas, crie um método que cheque se uma conta deve ser inserida.– Inclua a chamada no método inserir(..).
• Em seguida, abstraia a maneira como essa checagem é implementada nessa classe.– abstract!
Davi Pires {[email protected]}
Exercícios
• Tente implementar a estrutura hierárquica feita em Professores* com interfaces, ao invés de classes abstratas.
• Compare as vantagens e desvantagens de cada técnica.
Este trabalho está licenciado sob uma Licença Creative Commons Atribuição-Uso Não-Comercial-Compatilhamento pela mesma licença. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/2.0/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.