java: classes abstratas, anônimas, interface
TRANSCRIPT
![Page 1: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/1.jpg)
Classes Abstratas, Anônimas, Interface
Arthur Emanuel de Oliveira Carosia
![Page 2: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/2.jpg)
Classes Abstratas• Um caso em que não faz sentido ter um objeto, apesar da
classe existir: – imagine a classe Pessoa e duas filhas, PessoaFisica e
PessoaJuridica. – Quando puxamos um relatório de nossos clientes (uma array de
Pessoa por exemplo), queremos que cada um deles seja ou uma PessoaFisica, ou uma PessoaJuridica.
– A classe Pessoa, nesse caso, estaria sendo usada apenas para ganhar o polimorfismo e herdar algumas coisas: não faz sentido permitir instanciá-la.
• Para resolver esses problemas, temos as classes abstratas.
![Page 3: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/3.jpg)
Classes Abstratas
• Usamos a palavra chave abstract para impedir que uma classe possa ser instanciada.
• Ela é uma classe que apenas idealiza um tipo, define apenas um rascunho.
![Page 4: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/4.jpg)
Classes Abstratas
![Page 5: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/5.jpg)
Classes Abstratas
![Page 6: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/6.jpg)
Classes Abstratas
• Servem para aplicar o polimorfismo e herança dos atributos e métodos, que são recursos muito poderosos.
![Page 7: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/7.jpg)
Métodos Abstratos
• Cada classe filha terá um método diferente de bonificação – Queremos que cada pessoa que escreve a classe
de um Funcionario diferente (subclasses de Funcionario) reescreva o método getBonificacao de acordo com as suas regras.
![Page 8: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/8.jpg)
Métodos Abstratos
• Existe um recurso em Java que, em uma classe abstrata, podemos escrever que determinado método será sempre escrito pelas classes filhas. Isto é, um método abstrato.
• Ele indica que todas as classes filhas (concretas, isto é, que não forem abstratas) devem reescrever esse método ou não compilarão. É como se você herdasse a responsabilidade de ter aquele método
![Page 9: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/9.jpg)
Classes Abstratas + Métodos Abstratos
![Page 10: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/10.jpg)
Classes Abstratas + Métodos Abstratos
• Repare que não colocamos o corpo do método e usamos a palavra chave abstract para definir o mesmo.
• Esse método nunca vai ser chamado, sempre que alguém chamar o método getBonificacao, vai cair em uma das suas filhas, que realmente escreveram o método.
• Qualquer classe que estender a classe Funcionario será obrigada a reescrever este método, tornando-o "concreto". Se não reescreverem esse método, um erro de compilação ocorrerá.
• Uma classe abstrata não precisa necessariamente ter um método abstrato.
![Page 11: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/11.jpg)
Exercício
• Implemente com o uso de interface gráfica em Swing e classes abstratas um programa que modele a seguinte situação:– Uma Conta Corrente possui seu saldo atual, que corresponde
a 99% do valor corrente disponível, devido a impostos cobrados.
– Uma Conta Poupança possui seu saldo atual, que corresponde a 102% do valor corrente disponível, devido à aplicação valorizada.
• Crie uma classe abstrata Conta com um método abstrato determinarSaldo() para representar essa situação.
![Page 12: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/12.jpg)
Exercício
• O seguinte diagrama é válido?
![Page 13: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/13.jpg)
Interface
• Toda classe define 2 itens:– o que uma classe faz (as assinaturas dos métodos)– como uma classe faz essas tarefas (o corpo dos
métodos e atributos privados)
• Podemos criar um "contrato" que define tudo o que uma classe deve fazer se quiser ter um determinado status.
• A classe que quiser, pode "assinar" esse contrato.
![Page 14: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/14.jpg)
Interface
• Interface é a maneira através da qual conversamos com um objeto.
• Uma interface pode definir uma série de métodos, mas nunca conter implementação deles. Ela só expõe o que o objeto deve fazer, e não como ele faz, nem o que ele tem. Como ele faz vai ser definido em uma implementação dessa interface.
![Page 15: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/15.jpg)
Interface
• Uma classe deve implementar essa interface, escrevendo os métodos pedidos pela interface– Semelhante com o efeito de herdar métodos abstratos– Métodos de uma interface são públicos e abstratos
![Page 16: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/16.jpg)
Interface
![Page 17: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/17.jpg)
Interface
• A partir de agora, podemos tratar um Gerente como sendo um Autenticavel.
• Mais uma forma de referenciar a um Gerente. • Polimorfismo
![Page 18: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/18.jpg)
Exercício• Crie a interface AreaCalculavel, com o método abstrato
calculaArea, que quando implementado deve calcular a área geométrica da classe.
• Desenvolva as seguintes classes implementando a interface AreaCalculavel: – a classe Quadrado, com o atributo lado– Retangulo, com largura e altura• Teste ambas as classes utilizando o polimorfismo de
AreaCalculavel.• Crie uma inteface gráfica em Swing que calcule tanto a área do
quadrado como de um retângulo utilizando o código desenvolvido.
![Page 19: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/19.jpg)
Classes Internas
• Classes internas são classes declaradas dentro de outras classes.
• Uma classe interna tem nome Externa.Interna pois faz parte do objeto da classe externa.
![Page 20: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/20.jpg)
Classes Internas
• A vantagem é não precisar de um arquivo separado e que classes internas podem acessar tudo que a externa possui (métodos, atributos etc).
• É possível até encapsular essa classe interna marcando-a como private. Dessa forma, apenas a externa pode enxergar.
• São classes normais, que podem implementar interfaces, ter métodos, ser instanciadas etc.
![Page 21: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/21.jpg)
Classe Anônima
• Uma forma mais específica de classe interna é a chamada classe anônima que é muito vista em códigos com Swing.
• De forma simples, cria-se uma classe sem mesmo declarar seu nome em momento algum.
![Page 22: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/22.jpg)
Classe Anônima• É necessário um objeto do tipo ActionListener para passar
para nosso botão. • Normalmente criaríamos uma nova classe para isso e
daríamos new nela. • Usando classes anônimas damos new e implementamos a
classe ao mesmo tempo, usando a sintaxe a seguir.
![Page 23: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/23.jpg)
Classe Anônima
• Como criamos uma classe no momento que precisamos, é comum nos perguntarmos qual é o nome dessa classe criada.
• Ninguém definiu o nome para essa implementação particular de um ActionListener, então, por não ter nome definido, classes como essas são chamadas de classes anônimas.
![Page 24: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/24.jpg)
Exercícios• Desenvolva uma interface gráfica em Swing para o seguinte
problema.• Em um jogo, existem aviões e pássaros.• Ambos são Objetos do Jogo e possuem em comum o seu
tamanho, ponto x e ponto y.• No entanto, Aviões podem atirar e pássaros não. Desenvolva
uma interface, denominada Atirador, com o método atirar, que deve ser obrigatoriamente implementado por avião como uma linha que se tornará visível entre o avião e um pássaro no jogo.
• Obs: na interface, o avião e o pássaro podem ser definidos como botões de diferentes tamanhos. O avião irá atirar quando seu botão for pressionado.
![Page 25: Java: Classes Abstratas, Anônimas, Interface](https://reader035.vdocuments.mx/reader035/viewer/2022070516/5872a0a31a28ab07208b5aaf/html5/thumbnails/25.jpg)
Classes Abstratas, Anônimas, Interface
Arthur Emanuel de Oliveira Carosia