Your SlideShare is downloading. ×
0
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Curso java   06 - mais construtores, interfaces e polimorfismo
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Curso java 06 - mais construtores, interfaces e polimorfismo

2,577

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,577
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
81
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Construtores e interfaces Maurício Linhares
  • 2. Herança e construtores}  Quando uma classe herda de outra, ela herda as ações (os métodos) e os atributos (variáveis de instância), mas os construtores não são herdados;}  Em qualquer construtor, a primeira linha é, obrigatoriamente, uma chamada a um construtor da superclasse, quando a nossa superclasse tem um construtor padrão, o compilador adiciona essa linha automaticamente;
  • 3. Exemplopublic class Animal { public Animal() { super(); }}public class Leao extends Animal { public Leao() { super(); }}
  • 4. Se a superclasse não tiver umconstrutor padrão...}  Na primeira linha do construtor da sua subclasse você vai ter que chamar um dos construtores da supeclasse diretamente;}  Você pode escolher entre qualquer um dos construtores que houverem na superclasse;}  A chamada a o construtor da superclasse é feita através de uma chamada a “super()” passando os parâmetros dentro dos parênteses;}  Não pode haver nenhuma linha de código anterior a chamada do construtor da superclasse;
  • 5. Exemplo de superclasse sem construtorpadrãopublic class Canideo extends Animal { private String raca; public Canideo( String raca ) { this.raca = raca; } public String getRaca() { return raca; }}
  • 6. Exemplo da subclassepublic class Cachorro extends Canideo { public Cachorro() { //não compila } public Cachorro(String raca) { super(raca); }}
  • 7. A anatomia de um objeto que herda deoutros objetos Ordem de execução dos construtores Cachorro Canídeo Animal Object
  • 8. Quando eu invoco o construtor deCachorro… Construtor de object é executado Construtor Animal invoca de animal é super() executado Canídeo Construtor invoca de Canídeo é super() executado Cachorro Construtor invoca de cachorro super() é executado
  • 9. Chamando um construtor da mesmaclasse}  É possível invocar, de dentro de um construtor, outro construtor da mesma classe;}  Você faz isso através de uma chamada a “this()” passando pelos parênteses os parâmetros para o construtor que vocêr quer invocar;}  Essa chamada a “this()” deve ser feita na primeira linha do seu construtor;
  • 10. Exemplo de chamada a construtor damesma classepublic class Cachorro extends Canideos { public Cachorro() { this( "Pastor Alemão" ); } public Cachorro(String raca) { super(raca); }}
  • 11. Complicando o nosso problema deherança}  Nossos animais viviam em um zoológico, mas agora o nosso sistema também precisa ser capaz de lidar com animais de estimação;}  Nem todos os animais vão ser animais de estimação (até porque você náo teria espaço para criar um hipopótamo em casa);}  Exemplos de animais que seriam bichos de estimação são Gatos e Cachorros;
  • 12. Criando a classe bixo de estimaçãopublic class BichoDeEstimacao { private String dono; public void setDono(String dono) { this.dono = dono; } public String getDono() { return dono;} public void brincar() { System.out.println("Brincando com " + this.dono); } public void comer() { System.out.println(“Comendo ração”); }}
  • 13. Agora, aonde colocar ela?BichoDeEstimação Animal Felino Canídeo Gato Leão Cachorro Lobo
  • 14. O Diamante da Morte Object comer() comer() Bicho Animal Gato
  • 15. Herança múltipla}  O famoso diamante da morte é um dos resultados de se usar herança múltipla em projetos;}  Em Java, felizmente, é impossível usar herança múltipla, então não precisamos nos preocupar com esse problema;}  Mas o fato de não haver herança múltipla também não resolve nosso problema, que é fazer gatos e cachorros poderem ser tratados como bichos de estimação;
  • 16. E as interfaçes vem para salvar o dia!}  Interfaces são “contratos” definidos em Java que dizem como um objeto deve se comportar;}  Em uma interface você define métodos que um objeto que implemente o contrato da interface deve ter implementados;}  Uma interface funciona como uma classe abstrata que não tem nenhuma implementação;
  • 17. A nossa primeira interfacepublic interface BichoDeEstimacao extends Cloneable { public abstract void setDono( String dono ); public abstract String getDono( ); public abstract void comer(); public abstract void brincar();}
  • 18. Em uma interface…}  Todos os métodos são abstratos;}  Todos os métodos são públicos;}  Não existem construtores;}  Não existem variáveis de instância, apenas constantes;
  • 19. Implementando uma interfacepublic class Cachorro extends Canideo implements BichoDeEstimacao { private String dono; public String getDono() { return this.dono; } public void setDono(String dono) { this.dono = dono; } public void brincar() { System.out.println("Brincando com " + this.dono); }}
  • 20. Implementando interfaces}  Diferentemente de classes abstratas, onde você também pode herdar implementação, em uma interface você herda apenas o contrato, as assinaturas dos métodos;}  Em vez de usar “extends”, em interfaces nós usamos “implements”, então no caso de interfaces nós estamos mesmo herdando comportamentos;}  Um mesmo objeto pode implementar várias interfaces, ele não precisa implementar apenas uma;
  • 21. Usando interfacespublic class CachorroTest { public static void main(String[] args) { BichoDeEstimacao bicho = new Cachorro(); bicho.setDono("José"); bicho.brincar(); }}
  • 22. Onde mais eu posso ver interfaces?}  Coleções }  Collection }  List ¨  ArrayList ¨  LinkedList }  Set ¨  HashSet ¨  LinkedHashSet }  Map ¨  HashMap, ¨  LinkedHashMap
  • 23. Quando usar interfaces}  Quando o problema levar você para o diamante da morte :P}  Quando você quiser que classes diferentes respondam a um mesmo contrato, independente da implementação delas ( “Se fala, anda, nada e voa como um pato, é um pato!” ) ;}  Quando você quer evitar “amarrar” a supeclasse de um conjunto de classes desnecessariamente;
  • 24. Exercício}  Crie duas implementações para a interface abaixo:public interface BancoDeDados { public void adicionar( Pessoa pessoa ); public void remover( Pessoa pessoa ); public List<Pessoa> listar(); public Pessoa encontrarPessoaPeloNome( String nome ); public Pessoa encontrarPessoaPeloCPF( String cpf );}
  • 25. Exercício - detalhes}  Uma das implementações deve manter os dados em uma coleção dentro do objeto (uma LinkedList ou ArrayList);}  A outra implementação deve escrever o resultado das operações em um arquivo. Esse arquivo pode ter o formato que você quiser, mas todas as operações devem ser refletidas nesse arquivo;}  Pra escrever em arquivo você tanto pode criar o seu próprio formato, como pode usar ObjectInputStream, ObjectOutputStream e Serializable;
  • 26. Exercício – mais detalhes}  Quem entregar o exercício usando um arquivo estilo CSV ou XML ganha uma ajudinha na nota;}  Pra lidar com arquivos em Java, as classes são File, InputStream, OutputStream, Reader e Writer;

×