Java Básico
Classes Abstratas e Interfaces
Ayslan Macedo de Sousa
1
Classes Abstratas
• Uma classe abstrata é desenvolvida para
representar entidades e conceitos abstratos
• Será uma superclasse
• Não pode ser instanciada
• Normalmente possui métodos abstratos
2
Classes abstratas em Java
Em java para que a classe seja abstrata é necessário o
uso da palavra-chave abstract na declaração da classe:
1. public abstract class Pessoa {
2.
3. }
3
Métodos Abstratos
• Um método abstrato só pode ser criado em uma
classe abstrata
• Os métodos abstratos devem ser obrigatoriamente
implementados pelas subclasses
• Métodos estáticos não podem ser abstratos.
• Atributos também não podem ser abstratos
4
Classes Abstratas - Pessaoa
Transformando a classe Pessoa em abstrata, e o método getDocumeto():
1. package [Link];
2.
3. public abstract class Pessoa {
4.
5. private String nome;
6. private String numeroDocumento;
7.
8. public Pessoa() {
9. }
10.
11. public Pessoa(String nome) {
12. [Link] = nome;
13. }
14.
15. public abstract String getDocumento();
16.
17. //getters e setters
18.
19. }
5
Classes Abstratas - UML
Na UML o nome da classe abstrata e os métodos abstratos
devem ficar em itálico:
6
Exercício - Transformar a classe Pessoa em Abstrata
• A classe Pessoa deve ser abstrata
• O método getDocumento() na classe pessoa deve ser abstrato
• O método getDocumento() na subclasse PessoaFisica deve retornar a String “CPF”
• O método getDocumento() na subclasse PessoaJuridica deve retornar a String
“CNPJ”
1. package [Link];
2.
3. public abstract class Pessoa {
4.
5. private String nome;
6. private String numeroDocumento;
7.
8. public abstract String getDocumento();
9.
10. //getters e setters
11.}
7
Interfaces
• É um contrato entre a classe e o mundo externo
• Quando uma classe implementa uma interface, ela
está comprometida a fornecer o comportamento
publicado pela interface
• Pode ser usada para isolar a lógica da implementação
8
Interfaces em Java
Para declarar uma interface em java, deve-se
usar a palavra-chave interface:
1. public interface FiguraGeometrica{
2. public String getTipoFigura();
3. public double getArea();
4. public double getPerimetro();
5. }
9
Exercício - Interfaces
• Criar o pacote [Link]
• Criar a classe FiguraGeometrica no pacote criado
– Dica: ao criar o arquivo, pode-se utilizar a IDE
• Clicar com direito selecionar Novo -> Interface Java
1. public interface FiguraGeometrica{
2. public String getTipoFigura();
3. public double getArea();
4. public double getPerimetro();
5. }
10
Interfaces
Quando a herança está presente na classe, o implements deve
vir após o extends:
1. public class Quadrado implements FiguraGeometrica extends QuatroLados {
2.
3. }
1. public class Quadrado extends QuatroLados implements FiguraGeometrica{
2.
3. }
11
Interfaces - Criando a implementação
Para “implementar” uma interface deve-se utilizar a palavra-
chave implements, após a definição da classe:
1. public class Quadrado implements FiguraGeometrica{
2.
3. public String getTipoFigura() {
4. return "Quadrado";
5. }
6.
7. public double getArea() {
8. //lógica de calcular a área
9. }
10.
11. public double getPerimetro() {
12. //lógica de calcular o perimetro
13. }
14. }
12
Interfaces
Importante!
Métodos de uma interfaces são por padrão public, assim ao
tentar colocar o método como private ou protected, o código
apresenta erro de compilação.
13
Interfaces - UML
No diagrama de classes UML uma interface e suas
implementações podem definidos como mostrado abaixo:
14
Exercício - Interface
• Dentro do pacote [Link] criar a classe Quadrado
• Criar um construtor que recebe o lado
• A classe quadrado deve implementar a interface FiguraGeometrica
• Desenvolver lógica para os métodos getArea() e getPerimetro()
1. public class Quadrado implements FiguraGeometrica{
2.
3. private int lado;
4.
5. public String getTipoFigura() {
6. return "Quadrado";
7. }
8.
9. }
15
Exercício - Interface
• Dentro do pacote [Link] criar a classe Circulo
• Criar um construtor que recebe o raio
• A classe quadrado deve implementar a interface FiguraGeometrica
• Desenvolver lógica para os métodos getArea() e getPerimetro()
– Área = 𝝅 ∗ 𝒓𝟐
– Perímetro = 𝟐 ∗ 𝝅 ∗ 𝒓
1. public class Circulo implements FiguraGeometrica{
2.
3. private int raio;
4.
5. public String getTipoFigura() {
6. return "Círculo";
7. }
8.
9. }
16
Exercício - Interfaces
• Dentro do pacote [Link] criar a classe TesteFiguraGeometrica
• Executar a classe e observar o resultado
1. package [Link];
2.
3. public class TesteFiguraGeometrica {
4.
5. public static void main(String[] args) {
6.
7. FiguraGeometrica figura1 = new Quadrado(2);
8. FiguraGeometrica figura2 = new Circulo(2);
9.
10. [Link]("Figura 1 - "+[Link]());
11. [Link]("Area - "+[Link]());
12. [Link]("Perímetro - "+[Link]());
13.
14. [Link]("Figura 2 - "+[Link]());
15. [Link]("Area - "+[Link]());
16. [Link]("Perímetro - "+[Link]());
17.
18. }
19.
20. }
17
Interfaces - Múltiplas implementações
Uma classe pode implementar várias interfaces. Ao fazer
isso ela está fazendo o contrato com essas interfaces.
Exemplo de classe que implementa 2 interfaces:
1. public class Quadrado implements FiguraGeometrica, QuatroLados{
2.
3. }
Exemplo de classe que implementa 3 interfaces:
1. public class Funcionario implements
2. Serializable, User, OutraInterface{
3.
4. }
18
Exercício de Fixação - Interface
Considerando as classe(s)/interface(s):
1. public interface Usuario{
2. }
1. public class Funcionario extends PessoaFisica{
2. }
Como ficaria a classe Funcionario se ela implementasse a interface Usuario?
a) public class Funcionario implements Usuario extends PessoaFisica
b) public class Funcionario extends PessoaFisica, Usuario
c) public class Funcionario extends PessoaFisica implement Usuario
d) public class Funcionario extends PessoaFisica implements Usuario
e) public class Funcionario extends PessoaFisica extends Usuario
19
Exercício de Fixação - Interface
Considerando as classe(s)/interface(s):
1. public interface Usuario{
2. }
1. public class Funcionario extends PessoaFisica{
2. }
Como ficaria a classe Funcionario se ela implementasse a interface Usuario?
a) public class Funcionario implements Usuario extends PessoaFisica
b) public class Funcionario extends PessoaFisica, Usuario
c) public class Funcionario extends PessoaFisica implement Usuario
d) public class Funcionario extends PessoaFisica implements Usuario
e) public class Funcionario extends PessoaFisica extends Usuario
20